pg_query 4.2.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 +15 -0
- data/README.md +6 -8
- data/Rakefile +3 -4
- data/ext/pg_query/extconf.rb +14 -6
- 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/{access → postgres/access}/amapi.h +3 -1
- data/ext/pg_query/include/{access → postgres/access}/attmap.h +5 -3
- data/ext/pg_query/include/{access → postgres/access}/attnum.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/clog.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/genam.h +7 -5
- data/ext/pg_query/include/{access → postgres/access}/gin.h +16 -3
- data/ext/pg_query/include/{access → postgres/access}/htup.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/htup_details.h +6 -2
- data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -58
- 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 +1 -1
- data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +2 -2
- 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 +1 -1
- data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/table.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/tableam.h +68 -45
- data/ext/pg_query/include/{access → postgres/access}/toast_compression.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/transam.h +1 -1
- 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 +58 -98
- data/ext/pg_query/include/{access → postgres/access}/twophase.h +2 -2
- data/ext/pg_query/include/{access → postgres/access}/xact.h +25 -18
- data/ext/pg_query/include/{access → postgres/access}/xlog.h +15 -16
- data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +100 -62
- data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
- data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +6 -25
- data/ext/pg_query/include/{access → postgres/access}/xlogprefetcher.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +7 -6
- data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +17 -5
- data/ext/pg_query/include/{access → postgres/access}/xlogrecovery.h +4 -3
- data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
- data/ext/pg_query/include/{c.h → postgres/c.h} +144 -156
- data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +4 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +5 -4
- data/ext/pg_query/include/{catalog → postgres/catalog}/genbki.h +7 -6
- data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +4 -4
- data/ext/pg_query/include/{catalog → postgres/catalog}/indexing.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +2 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +10 -8
- data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +3 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +19 -17
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -19
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +4 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +2 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +9 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +2 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +1 -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 +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +3 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +4 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +2 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +6 -6
- data/ext/pg_query/include/{commands → postgres/commands}/async.h +1 -1
- data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +2 -1
- data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +2 -1
- data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +1 -1
- 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 +4 -4
- data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +15 -14
- data/ext/pg_query/include/{commands → postgres/commands}/user.h +9 -3
- data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +60 -14
- data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
- data/ext/pg_query/include/{common → postgres/common}/file_perm.h +1 -1
- 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 +1 -1
- data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
- data/ext/pg_query/include/{common → postgres/common}/pg_prng.h +3 -2
- data/ext/pg_query/include/{common → postgres/common}/relpath.h +20 -13
- 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/{common → postgres/common}/string.h +5 -3
- data/ext/pg_query/include/{common → postgres/common}/unicode_east_asian_fw_table.h +10 -10
- data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +31 -13
- 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 +11 -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 +34 -17
- data/ext/pg_query/include/{executor → postgres/executor}/functions.h +1 -1
- data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +1 -1
- data/ext/pg_query/include/{executor → postgres/executor}/spi.h +2 -2
- 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} +21 -2
- data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
- data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +12 -12
- 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 +2 -2
- data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
- data/ext/pg_query/include/{lib → postgres/lib}/dshash.h +4 -1
- data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +435 -22
- data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
- data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +9 -9
- data/ext/pg_query/include/{lib → postgres/lib}/sort_template.h +1 -1
- data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
- data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +8 -2
- data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +1 -1
- data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +24 -17
- data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +36 -25
- data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +1 -1
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +10 -41
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +22 -10
- 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 +35 -18
- data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +27 -15
- data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
- data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +83 -30
- data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +5 -3
- data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
- data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +14 -2
- data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +7 -4
- 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 +96 -511
- 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 +377 -139
- data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1090 -440
- data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +30 -7
- data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +367 -124
- data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +670 -222
- data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
- data/ext/pg_query/include/{utils → postgres/nodes}/queryjumble.h +5 -7
- 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/{nodes → postgres/nodes}/value.h +12 -2
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +6 -4
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +1 -1
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +8 -8
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +16 -7
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +3 -6
- data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +4 -3
- data/ext/pg_query/include/{parser → postgres/parser}/kwlist.h +12 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +4 -2
- data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +3 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +1 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +1 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +22 -4
- data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -3
- data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +8 -3
- data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
- data/ext/pg_query/include/{parser → postgres/parser}/parser.h +4 -4
- 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 +1 -1
- data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
- data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +156 -217
- data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +8 -46
- data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
- data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +1 -1
- data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
- data/ext/pg_query/include/{pgstat.h → postgres/pgstat.h} +173 -94
- data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +3 -3
- data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +66 -64
- 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} +1 -1
- data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +2 -1
- data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +48 -46
- data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +28 -33
- data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +3 -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 +1 -1
- 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 +62 -25
- 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} +42 -75
- 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 +1 -4
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +2 -2
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +1 -1
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +2 -2
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
- data/ext/pg_query/include/postgres/postmaster/pgarch.h +36 -0
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +6 -3
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/startup.h +3 -1
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +2 -2
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +3 -1
- data/ext/pg_query/include/{regex → postgres/regex}/regex.h +9 -6
- data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +6 -1
- data/ext/pg_query/include/{replication → postgres/replication}/logicalproto.h +30 -10
- data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
- data/ext/pg_query/include/{replication → postgres/replication}/origin.h +4 -4
- data/ext/pg_query/include/{replication → postgres/replication}/reorderbuffer.h +113 -45
- data/ext/pg_query/include/{replication → postgres/replication}/slot.h +25 -6
- data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +2 -8
- data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +15 -9
- data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +13 -13
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -4
- 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 +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -31
- data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +183 -87
- data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +146 -93
- data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +3 -6
- data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +4 -1
- data/ext/pg_query/include/{storage → postgres/storage}/fd.h +24 -20
- data/ext/pg_query/include/{storage → postgres/storage}/fileset.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +2 -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 +94 -57
- data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/latch.h +9 -1
- data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +6 -1
- data/ext/pg_query/include/{storage → postgres/storage}/lock.h +21 -13
- data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +3 -3
- data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +16 -2
- 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 +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/proc.h +22 -17
- data/ext/pg_query/include/{storage → postgres/storage}/procarray.h +3 -2
- data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +3 -1
- data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
- data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +66 -309
- data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +1 -1
- 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 +3 -3
- data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
- data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +12 -10
- data/ext/pg_query/include/{storage → postgres/storage}/spin.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/standby.h +9 -8
- data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/sync.h +3 -3
- data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
- data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +1 -1
- 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 -1
- data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +1 -1
- data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +3 -6
- data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +1 -1
- data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +2 -4
- data/ext/pg_query/include/{utils → postgres/utils}/acl.h +26 -81
- data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/array.h +19 -1
- data/ext/pg_query/include/{utils → postgres/utils}/backend_progress.h +2 -1
- data/ext/pg_query/include/{utils → postgres/utils}/backend_status.h +24 -3
- data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +15 -6
- data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +1 -1
- 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 +41 -21
- data/ext/pg_query/include/{utils → postgres/utils}/datum.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
- data/ext/pg_query/include/{utils → postgres/utils}/elog.h +104 -29
- 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 +7 -6
- data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +54 -1
- data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +45 -3
- data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/guc.h +59 -86
- data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
- data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +49 -3
- data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/inval.h +3 -3
- data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
- data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +5 -1
- data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +7 -51
- 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 +20 -5
- data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +9 -2
- data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
- data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +22 -14
- data/ext/pg_query/include/{utils → postgres/utils}/pgstat_internal.h +37 -7
- data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/portal.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/probes.h +6 -6
- 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/{utils → postgres/utils}/regproc.h +3 -3
- data/ext/pg_query/include/{utils → postgres/utils}/rel.h +60 -43
- data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +13 -8
- 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 +6 -1
- data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +4 -2
- data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +2 -2
- data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +4 -1
- data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +41 -11
- data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +189 -35
- data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +13 -1
- data/ext/pg_query/include/{utils → postgres/utils}/wait_event.h +9 -4
- data/ext/pg_query/include/{utils → postgres/utils}/xml.h +15 -5
- data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +7 -457
- 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/pg_query.c +10 -1
- data/ext/pg_query/pg_query.pb-c.c +19755 -17757
- data/ext/pg_query/pg_query_fingerprint.c +12 -8
- 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_json.c +6 -0
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +3 -2
- data/ext/pg_query/pg_query_parse.c +47 -5
- data/ext/pg_query/pg_query_parse_plpgsql.c +7 -5
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +1 -0
- data/ext/pg_query/pg_query_ruby.c +5 -0
- data/ext/pg_query/pg_query_scan.c +1 -1
- data/ext/pg_query/pg_query_split.c +3 -3
- data/ext/pg_query/postgres_deparse.c +503 -105
- 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_nodes.c +38 -0
- 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_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 +371 -249
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +33 -1
- data/ext/pg_query/src_backend_utils_init_globals.c +6 -3
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +21 -67
- 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 +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 +79 -5
- data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
- data/ext/pg_query/src_port_snprintf.c +6 -10
- data/ext/pg_query/src_port_strerror.c +1 -1
- data/ext/pg_query/src_port_strlcpy.c +79 -0
- data/lib/pg_query/fingerprint.rb +2 -3
- data/lib/pg_query/node.rb +16 -11
- data/lib/pg_query/parse.rb +1 -1
- data/lib/pg_query/pg_query_pb.rb +166 -3191
- data/lib/pg_query/treewalker.rb +23 -5
- data/lib/pg_query/version.rb +1 -1
- metadata +432 -383
- data/ext/pg_query/guc-file.c +0 -0
- 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/common/ip.h +0 -31
- data/ext/pg_query/include/getaddrinfo.h +0 -162
- data/ext/pg_query/include/kwlist_d.h +0 -1095
- data/ext/pg_query/include/parser/gram.h +0 -1101
- data/ext/pg_query/include/pg_config_os.h +0 -8
- data/ext/pg_query/include/portability/instr_time.h +0 -256
- data/ext/pg_query/include/postmaster/auxprocess.h +0 -20
- data/ext/pg_query/include/postmaster/fork_process.h +0 -17
- data/ext/pg_query/include/postmaster/pgarch.h +0 -73
- data/ext/pg_query/include/replication/logicalworker.h +0 -19
- 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/pidfile.h +0 -56
- data/ext/pg_query/include/utils/ps_status.h +0 -25
- 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_postmaster_postmaster.c +0 -2201
- 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
- data/ext/pg_query/src_port_strnlen.c +0 -39
- /data/ext/pg_query/include/{access → postgres/access}/rmgr.h +0 -0
- /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
- /data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +0 -0
- /data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -0
- /data/ext/pg_query/include/{utils → postgres/utils}/errcodes.h +0 -0
|
@@ -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, '(');
|
|
@@ -2465,9 +2551,9 @@ static void deparseFuncCall(StringInfo str, FuncCall *func_call)
|
|
|
2465
2551
|
* Note that the first and second arguments are switched in this format
|
|
2466
2552
|
*/
|
|
2467
2553
|
appendStringInfoString(str, "POSITION(");
|
|
2468
|
-
|
|
2554
|
+
deparseBExpr(str, lsecond(func_call->args));
|
|
2469
2555
|
appendStringInfoString(str, " IN ");
|
|
2470
|
-
|
|
2556
|
+
deparseBExpr(str, linitial(func_call->args));
|
|
2471
2557
|
appendStringInfoChar(str, ')');
|
|
2472
2558
|
return;
|
|
2473
2559
|
} else if (func_call->funcformat == COERCE_SQL_SYNTAX &&
|
|
@@ -2582,7 +2668,18 @@ static void deparseFuncCall(StringInfo str, FuncCall *func_call)
|
|
|
2582
2668
|
* keyword parameter style when its called as a keyword, not as a regular function (i.e. pg_catalog.timezone)
|
|
2583
2669
|
* Note that the arguments are swapped in this case
|
|
2584
2670
|
*/
|
|
2585
|
-
|
|
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
|
+
|
|
2586
2683
|
appendStringInfoString(str, " AT TIME ZONE ");
|
|
2587
2684
|
deparseExpr(str, linitial(func_call->args));
|
|
2588
2685
|
return;
|
|
@@ -2641,6 +2738,13 @@ static void deparseFuncCall(StringInfo str, FuncCall *func_call)
|
|
|
2641
2738
|
deparseExpr(str, lsecond(func_call->args));
|
|
2642
2739
|
appendStringInfoChar(str, ')');
|
|
2643
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;
|
|
2644
2748
|
}
|
|
2645
2749
|
|
|
2646
2750
|
deparseFuncName(str, func_call->funcname);
|
|
@@ -2879,8 +2983,8 @@ static void deparseAExpr(StringInfo str, A_Expr* a_expr, DeparseNodeContext cont
|
|
|
2879
2983
|
ListCell *lc;
|
|
2880
2984
|
char *name;
|
|
2881
2985
|
|
|
2882
|
-
bool need_lexpr_parens = a_expr->lexpr != NULL && (IsA(a_expr->lexpr, BoolExpr) || IsA(a_expr->lexpr, NullTest) || IsA(a_expr->lexpr, A_Expr));
|
|
2883
|
-
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));
|
|
2884
2988
|
|
|
2885
2989
|
switch (a_expr->kind) {
|
|
2886
2990
|
case AEXPR_OP: /* normal operator */
|
|
@@ -3300,6 +3404,7 @@ static void deparseJoinExpr(StringInfo str, JoinExpr *join_expr)
|
|
|
3300
3404
|
break;
|
|
3301
3405
|
case JOIN_SEMI:
|
|
3302
3406
|
case JOIN_ANTI:
|
|
3407
|
+
case JOIN_RIGHT_ANTI:
|
|
3303
3408
|
case JOIN_UNIQUE_OUTER:
|
|
3304
3409
|
case JOIN_UNIQUE_INNER:
|
|
3305
3410
|
// Only used by the planner/executor, not seen in parser output
|
|
@@ -3545,7 +3650,7 @@ static void deparseTypeCast(StringInfo str, TypeCast *type_cast, DeparseNodeCont
|
|
|
3545
3650
|
|
|
3546
3651
|
Assert(type_cast->typeName != NULL);
|
|
3547
3652
|
|
|
3548
|
-
if (IsA(type_cast->arg, A_Expr))
|
|
3653
|
+
if (IsA(type_cast->arg, A_Expr) || context == DEPARSE_NODE_CONTEXT_FUNC_EXPR)
|
|
3549
3654
|
{
|
|
3550
3655
|
appendStringInfoString(str, "CAST(");
|
|
3551
3656
|
deparseExpr(str, type_cast->arg);
|
|
@@ -3950,7 +4055,16 @@ static void deparseMinMaxExpr(StringInfo str, MinMaxExpr *min_max_expr)
|
|
|
3950
4055
|
|
|
3951
4056
|
static void deparseBooleanTest(StringInfo str, BooleanTest *boolean_test)
|
|
3952
4057
|
{
|
|
4058
|
+
bool need_parens = IsA(boolean_test->arg, BoolExpr);
|
|
4059
|
+
|
|
4060
|
+
if (need_parens)
|
|
4061
|
+
appendStringInfoChar(str, '(');
|
|
4062
|
+
|
|
3953
4063
|
deparseExpr(str, (Node *) boolean_test->arg);
|
|
4064
|
+
|
|
4065
|
+
if (need_parens)
|
|
4066
|
+
appendStringInfoChar(str, ')');
|
|
4067
|
+
|
|
3954
4068
|
switch (boolean_test->booltesttype)
|
|
3955
4069
|
{
|
|
3956
4070
|
case IS_TRUE:
|
|
@@ -3992,6 +4106,13 @@ static void deparseColumnDef(StringInfo str, ColumnDef *column_def)
|
|
|
3992
4106
|
appendStringInfoChar(str, ' ');
|
|
3993
4107
|
}
|
|
3994
4108
|
|
|
4109
|
+
if (column_def->storage_name)
|
|
4110
|
+
{
|
|
4111
|
+
appendStringInfoString(str, "STORAGE ");
|
|
4112
|
+
appendStringInfoString(str, column_def->storage_name);
|
|
4113
|
+
appendStringInfoChar(str, ' ');
|
|
4114
|
+
}
|
|
4115
|
+
|
|
3995
4116
|
if (column_def->raw_default != NULL)
|
|
3996
4117
|
{
|
|
3997
4118
|
appendStringInfoString(str, "USING ");
|
|
@@ -3999,6 +4120,13 @@ static void deparseColumnDef(StringInfo str, ColumnDef *column_def)
|
|
|
3999
4120
|
appendStringInfoChar(str, ' ');
|
|
4000
4121
|
}
|
|
4001
4122
|
|
|
4123
|
+
if (column_def->compression != NULL)
|
|
4124
|
+
{
|
|
4125
|
+
appendStringInfoString(str, "COMPRESSION ");
|
|
4126
|
+
appendStringInfoString(str, column_def->compression);
|
|
4127
|
+
appendStringInfoChar(str, ' ');
|
|
4128
|
+
}
|
|
4129
|
+
|
|
4002
4130
|
if (column_def->fdwoptions != NULL)
|
|
4003
4131
|
{
|
|
4004
4132
|
deparseCreateGenericOptions(str, column_def->fdwoptions);
|
|
@@ -4173,7 +4301,7 @@ static void deparseUpdateStmt(StringInfo str, UpdateStmt *update_stmt)
|
|
|
4173
4301
|
}
|
|
4174
4302
|
|
|
4175
4303
|
deparseFromClause(str, update_stmt->fromClause);
|
|
4176
|
-
|
|
4304
|
+
deparseWhereOrCurrentClause(str, update_stmt->whereClause);
|
|
4177
4305
|
|
|
4178
4306
|
if (list_length(update_stmt->returningList) > 0)
|
|
4179
4307
|
{
|
|
@@ -4287,7 +4415,7 @@ static void deparseDeleteStmt(StringInfo str, DeleteStmt *delete_stmt)
|
|
|
4287
4415
|
appendStringInfoChar(str, ' ');
|
|
4288
4416
|
}
|
|
4289
4417
|
|
|
4290
|
-
|
|
4418
|
+
deparseWhereOrCurrentClause(str, delete_stmt->whereClause);
|
|
4291
4419
|
|
|
4292
4420
|
if (list_length(delete_stmt->returningList) > 0)
|
|
4293
4421
|
{
|
|
@@ -4502,6 +4630,8 @@ static void deparseTableLikeClause(StringInfo str, TableLikeClause *table_like_c
|
|
|
4502
4630
|
{
|
|
4503
4631
|
if (table_like_clause->options & CREATE_TABLE_LIKE_COMMENTS)
|
|
4504
4632
|
appendStringInfoString(str, "INCLUDING COMMENTS ");
|
|
4633
|
+
if (table_like_clause->options & CREATE_TABLE_LIKE_COMPRESSION)
|
|
4634
|
+
appendStringInfoString(str, "INCLUDING COMPRESSION ");
|
|
4505
4635
|
if (table_like_clause->options & CREATE_TABLE_LIKE_CONSTRAINTS)
|
|
4506
4636
|
appendStringInfoString(str, "INCLUDING CONSTRAINTS ");
|
|
4507
4637
|
if (table_like_clause->options & CREATE_TABLE_LIKE_DEFAULTS)
|
|
@@ -4609,7 +4739,7 @@ static void deparseConstraint(StringInfo str, Constraint *constraint)
|
|
|
4609
4739
|
break;
|
|
4610
4740
|
case CONSTR_DEFAULT:
|
|
4611
4741
|
appendStringInfoString(str, "DEFAULT ");
|
|
4612
|
-
|
|
4742
|
+
deparseBExpr(str, constraint->raw_expr);
|
|
4613
4743
|
break;
|
|
4614
4744
|
case CONSTR_IDENTITY:
|
|
4615
4745
|
appendStringInfoString(str, "GENERATED ");
|
|
@@ -4643,6 +4773,8 @@ static void deparseConstraint(StringInfo str, Constraint *constraint)
|
|
|
4643
4773
|
break;
|
|
4644
4774
|
case CONSTR_UNIQUE:
|
|
4645
4775
|
appendStringInfoString(str, "UNIQUE ");
|
|
4776
|
+
if (constraint->nulls_not_distinct)
|
|
4777
|
+
appendStringInfoString(str, "NULLS NOT DISTINCT ");
|
|
4646
4778
|
break;
|
|
4647
4779
|
case CONSTR_EXCLUSION:
|
|
4648
4780
|
appendStringInfoString(str, "EXCLUDE ");
|
|
@@ -5108,7 +5240,19 @@ static void deparsePartitionSpec(StringInfo str, PartitionSpec *partition_spec)
|
|
|
5108
5240
|
ListCell *lc;
|
|
5109
5241
|
|
|
5110
5242
|
appendStringInfoString(str, "PARTITION BY ");
|
|
5111
|
-
|
|
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
|
+
}
|
|
5112
5256
|
|
|
5113
5257
|
appendStringInfoChar(str, '(');
|
|
5114
5258
|
foreach(lc, partition_spec->partParams)
|
|
@@ -6157,9 +6301,6 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
|
|
|
6157
6301
|
else
|
|
6158
6302
|
appendStringInfoString(str, "ADD COLUMN ");
|
|
6159
6303
|
break;
|
|
6160
|
-
case AT_AddColumnRecurse: /* internal to commands/tablecmds.c */
|
|
6161
|
-
Assert(false);
|
|
6162
|
-
break;
|
|
6163
6304
|
case AT_AddColumnToView: /* implicitly via CREATE OR REPLACE VIEW */
|
|
6164
6305
|
// Not present in raw parser output
|
|
6165
6306
|
Assert(false);
|
|
@@ -6218,9 +6359,6 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
|
|
|
6218
6359
|
else
|
|
6219
6360
|
appendStringInfoString(str, "DROP ");
|
|
6220
6361
|
break;
|
|
6221
|
-
case AT_DropColumnRecurse: /* internal to commands/tablecmds.c */
|
|
6222
|
-
Assert(false);
|
|
6223
|
-
break;
|
|
6224
6362
|
case AT_AddIndex: /* add index */
|
|
6225
6363
|
appendStringInfoString(str, "ADD INDEX ");
|
|
6226
6364
|
break;
|
|
@@ -6230,9 +6368,6 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
|
|
|
6230
6368
|
case AT_AddConstraint: /* add constraint */
|
|
6231
6369
|
appendStringInfoString(str, "ADD ");
|
|
6232
6370
|
break;
|
|
6233
|
-
case AT_AddConstraintRecurse: /* internal to commands/tablecmds.c */
|
|
6234
|
-
Assert(false);
|
|
6235
|
-
break;
|
|
6236
6371
|
case AT_ReAddConstraint: /* internal to commands/tablecmds.c */
|
|
6237
6372
|
Assert(false);
|
|
6238
6373
|
break;
|
|
@@ -6245,9 +6380,6 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
|
|
|
6245
6380
|
case AT_ValidateConstraint: /* validate constraint */
|
|
6246
6381
|
appendStringInfoString(str, "VALIDATE CONSTRAINT ");
|
|
6247
6382
|
break;
|
|
6248
|
-
case AT_ValidateConstraintRecurse: /* internal to commands/tablecmds.c */
|
|
6249
|
-
Assert(false);
|
|
6250
|
-
break;
|
|
6251
6383
|
case AT_AddIndexConstraint: /* add constraint using existing index */
|
|
6252
6384
|
// Not present in raw parser output
|
|
6253
6385
|
Assert(false);
|
|
@@ -6255,9 +6387,6 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
|
|
|
6255
6387
|
case AT_DropConstraint: /* drop constraint */
|
|
6256
6388
|
appendStringInfoString(str, "DROP CONSTRAINT ");
|
|
6257
6389
|
break;
|
|
6258
|
-
case AT_DropConstraintRecurse: /* internal to commands/tablecmds.c */
|
|
6259
|
-
Assert(false);
|
|
6260
|
-
break;
|
|
6261
6390
|
case AT_ReAddComment: /* internal to commands/tablecmds.c */
|
|
6262
6391
|
case AT_ReAddStatistics: /* internal to commands/tablecmds.c */
|
|
6263
6392
|
Assert(false);
|
|
@@ -6321,7 +6450,7 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
|
|
|
6321
6450
|
appendStringInfoString(str, "DISABLE TRIGGER ");
|
|
6322
6451
|
break;
|
|
6323
6452
|
case AT_EnableTrigAll: /* ENABLE TRIGGER ALL */
|
|
6324
|
-
appendStringInfoString(str, "ENABLE TRIGGER ");
|
|
6453
|
+
appendStringInfoString(str, "ENABLE TRIGGER ALL ");
|
|
6325
6454
|
break;
|
|
6326
6455
|
case AT_DisableTrigAll: /* DISABLE TRIGGER ALL */
|
|
6327
6456
|
appendStringInfoString(str, "DISABLE TRIGGER ALL ");
|
|
@@ -7325,6 +7454,8 @@ static void deparseCopyStmt(StringInfo str, CopyStmt *copy_stmt)
|
|
|
7325
7454
|
appendStringInfoString(str, "BINARY");
|
|
7326
7455
|
else if (strcmp(format, "csv") == 0)
|
|
7327
7456
|
appendStringInfoString(str, "CSV");
|
|
7457
|
+
else if (strcmp(format, "text") == 0)
|
|
7458
|
+
appendStringInfoString(str, "TEXT");
|
|
7328
7459
|
else
|
|
7329
7460
|
Assert(false);
|
|
7330
7461
|
}
|
|
@@ -7954,8 +8085,20 @@ static void deparseGrantRoleStmt(StringInfo str, GrantRoleStmt *grant_role_stmt)
|
|
|
7954
8085
|
else
|
|
7955
8086
|
appendStringInfoString(str, "REVOKE ");
|
|
7956
8087
|
|
|
7957
|
-
if (!grant_role_stmt->is_grant && grant_role_stmt->
|
|
7958
|
-
|
|
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
|
+
}
|
|
7959
8102
|
|
|
7960
8103
|
foreach(lc, grant_role_stmt->granted_roles)
|
|
7961
8104
|
{
|
|
@@ -7973,8 +8116,31 @@ static void deparseGrantRoleStmt(StringInfo str, GrantRoleStmt *grant_role_stmt)
|
|
|
7973
8116
|
deparseRoleList(str, grant_role_stmt->grantee_roles);
|
|
7974
8117
|
appendStringInfoChar(str, ' ');
|
|
7975
8118
|
|
|
7976
|
-
if (grant_role_stmt->is_grant
|
|
7977
|
-
|
|
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
|
+
}
|
|
7978
8144
|
|
|
7979
8145
|
if (grant_role_stmt->grantor)
|
|
7980
8146
|
{
|
|
@@ -7982,6 +8148,10 @@ static void deparseGrantRoleStmt(StringInfo str, GrantRoleStmt *grant_role_stmt)
|
|
|
7982
8148
|
deparseRoleSpec(str, castNode(RoleSpec, grant_role_stmt->grantor));
|
|
7983
8149
|
}
|
|
7984
8150
|
|
|
8151
|
+
if (grant_role_stmt->behavior == DROP_CASCADE) {
|
|
8152
|
+
appendStringInfoString(str, "CASCADE ");
|
|
8153
|
+
}
|
|
8154
|
+
|
|
7985
8155
|
removeTrailingSpace(str);
|
|
7986
8156
|
}
|
|
7987
8157
|
|
|
@@ -9795,12 +9965,6 @@ static void deparseClosePortalStmt(StringInfo str, ClosePortalStmt *close_portal
|
|
|
9795
9965
|
}
|
|
9796
9966
|
}
|
|
9797
9967
|
|
|
9798
|
-
static void deparseCurrentOfExpr(StringInfo str, CurrentOfExpr *current_of_expr)
|
|
9799
|
-
{
|
|
9800
|
-
appendStringInfoString(str, "CURRENT OF ");
|
|
9801
|
-
appendStringInfoString(str, quote_identifier(current_of_expr->cursor_name));
|
|
9802
|
-
}
|
|
9803
|
-
|
|
9804
9968
|
static void deparseCreateTrigStmt(StringInfo str, CreateTrigStmt *create_trig_stmt)
|
|
9805
9969
|
{
|
|
9806
9970
|
ListCell *lc;
|
|
@@ -10105,9 +10269,243 @@ static void deparseXmlSerialize(StringInfo str, XmlSerialize *xml_serialize)
|
|
|
10105
10269
|
deparseExpr(str, xml_serialize->expr);
|
|
10106
10270
|
appendStringInfoString(str, " AS ");
|
|
10107
10271
|
deparseTypeName(str, xml_serialize->typeName);
|
|
10272
|
+
|
|
10273
|
+
if (xml_serialize->indent) {
|
|
10274
|
+
appendStringInfoString(str, " INDENT");
|
|
10275
|
+
}
|
|
10276
|
+
|
|
10108
10277
|
appendStringInfoString(str, ")");
|
|
10109
10278
|
}
|
|
10110
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
|
+
|
|
10111
10509
|
static void deparseGroupingFunc(StringInfo str, GroupingFunc *grouping_func)
|
|
10112
10510
|
{
|
|
10113
10511
|
appendStringInfoString(str, "GROUPING(");
|