pg_query 4.2.3 → 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.
Files changed (486) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +6 -8
  4. data/Rakefile +3 -3
  5. data/ext/pg_query/extconf.rb +1 -3
  6. data/ext/pg_query/include/access/amapi.h +3 -1
  7. data/ext/pg_query/include/access/attmap.h +5 -3
  8. data/ext/pg_query/include/access/attnum.h +1 -1
  9. data/ext/pg_query/include/access/clog.h +1 -1
  10. data/ext/pg_query/include/access/commit_ts.h +1 -1
  11. data/ext/pg_query/include/access/detoast.h +1 -1
  12. data/ext/pg_query/include/access/genam.h +7 -5
  13. data/ext/pg_query/include/access/gin.h +16 -3
  14. data/ext/pg_query/include/access/htup.h +1 -1
  15. data/ext/pg_query/include/access/htup_details.h +6 -2
  16. data/ext/pg_query/include/access/itup.h +61 -58
  17. data/ext/pg_query/include/access/parallel.h +2 -2
  18. data/ext/pg_query/include/access/printtup.h +1 -1
  19. data/ext/pg_query/include/access/relation.h +1 -1
  20. data/ext/pg_query/include/access/relscan.h +1 -1
  21. data/ext/pg_query/include/access/rmgrlist.h +2 -2
  22. data/ext/pg_query/include/access/sdir.h +12 -3
  23. data/ext/pg_query/include/access/skey.h +1 -1
  24. data/ext/pg_query/include/access/stratnum.h +1 -1
  25. data/ext/pg_query/include/access/sysattr.h +1 -1
  26. data/ext/pg_query/include/access/table.h +1 -1
  27. data/ext/pg_query/include/access/tableam.h +68 -45
  28. data/ext/pg_query/include/access/toast_compression.h +1 -1
  29. data/ext/pg_query/include/access/transam.h +1 -1
  30. data/ext/pg_query/include/access/tsmapi.h +82 -0
  31. data/ext/pg_query/include/access/tupconvert.h +5 -2
  32. data/ext/pg_query/include/access/tupdesc.h +2 -2
  33. data/ext/pg_query/include/access/tupmacs.h +58 -98
  34. data/ext/pg_query/include/access/twophase.h +2 -2
  35. data/ext/pg_query/include/access/xact.h +25 -18
  36. data/ext/pg_query/include/access/xlog.h +15 -16
  37. data/ext/pg_query/include/access/xlog_internal.h +100 -62
  38. data/ext/pg_query/include/access/xlogbackup.h +41 -0
  39. data/ext/pg_query/include/access/xlogdefs.h +6 -25
  40. data/ext/pg_query/include/access/xlogprefetcher.h +1 -1
  41. data/ext/pg_query/include/access/xlogreader.h +7 -6
  42. data/ext/pg_query/include/access/xlogrecord.h +17 -5
  43. data/ext/pg_query/include/access/xlogrecovery.h +4 -3
  44. data/ext/pg_query/include/archive/archive_module.h +59 -0
  45. data/ext/pg_query/include/c.h +144 -156
  46. data/ext/pg_query/include/catalog/catalog.h +4 -3
  47. data/ext/pg_query/include/catalog/catversion.h +6 -2
  48. data/ext/pg_query/include/catalog/dependency.h +5 -4
  49. data/ext/pg_query/include/catalog/genbki.h +7 -6
  50. data/ext/pg_query/include/catalog/index.h +4 -4
  51. data/ext/pg_query/include/catalog/indexing.h +1 -1
  52. data/ext/pg_query/include/catalog/namespace.h +2 -2
  53. data/ext/pg_query/include/catalog/objectaccess.h +10 -8
  54. data/ext/pg_query/include/catalog/objectaddress.h +3 -3
  55. data/ext/pg_query/include/catalog/pg_aggregate.h +1 -1
  56. data/ext/pg_query/include/catalog/pg_aggregate_d.h +1 -1
  57. data/ext/pg_query/include/catalog/pg_am.h +1 -1
  58. data/ext/pg_query/include/catalog/pg_am_d.h +1 -1
  59. data/ext/pg_query/include/catalog/pg_attribute.h +19 -17
  60. data/ext/pg_query/include/catalog/pg_attribute_d.h +19 -19
  61. data/ext/pg_query/include/catalog/pg_authid.h +1 -1
  62. data/ext/pg_query/include/catalog/pg_authid_d.h +3 -1
  63. data/ext/pg_query/include/catalog/pg_class.h +1 -1
  64. data/ext/pg_query/include/catalog/pg_class_d.h +1 -1
  65. data/ext/pg_query/include/catalog/pg_collation.h +3 -1
  66. data/ext/pg_query/include/catalog/pg_collation_d.h +4 -3
  67. data/ext/pg_query/include/catalog/pg_constraint.h +2 -2
  68. data/ext/pg_query/include/catalog/pg_constraint_d.h +1 -1
  69. data/ext/pg_query/include/catalog/pg_control.h +9 -1
  70. data/ext/pg_query/include/catalog/pg_conversion.h +2 -2
  71. data/ext/pg_query/include/catalog/pg_conversion_d.h +1 -1
  72. data/ext/pg_query/include/catalog/pg_database.h +124 -0
  73. data/ext/pg_query/include/catalog/pg_database_d.h +52 -0
  74. data/ext/pg_query/include/catalog/pg_depend.h +1 -1
  75. data/ext/pg_query/include/catalog/pg_depend_d.h +1 -1
  76. data/ext/pg_query/include/catalog/pg_event_trigger.h +1 -1
  77. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +1 -1
  78. data/ext/pg_query/include/catalog/pg_index.h +1 -1
  79. data/ext/pg_query/include/catalog/pg_index_d.h +1 -1
  80. data/ext/pg_query/include/catalog/pg_language.h +1 -1
  81. data/ext/pg_query/include/catalog/pg_language_d.h +1 -1
  82. data/ext/pg_query/include/catalog/pg_namespace.h +1 -1
  83. data/ext/pg_query/include/catalog/pg_namespace_d.h +1 -1
  84. data/ext/pg_query/include/catalog/pg_opclass.h +1 -1
  85. data/ext/pg_query/include/catalog/pg_opclass_d.h +1 -1
  86. data/ext/pg_query/include/catalog/pg_operator.h +1 -1
  87. data/ext/pg_query/include/catalog/pg_operator_d.h +1 -1
  88. data/ext/pg_query/include/catalog/pg_opfamily.h +3 -2
  89. data/ext/pg_query/include/catalog/pg_opfamily_d.h +4 -2
  90. data/ext/pg_query/include/catalog/pg_partitioned_table.h +1 -1
  91. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +1 -1
  92. data/ext/pg_query/include/catalog/pg_proc.h +1 -1
  93. data/ext/pg_query/include/catalog/pg_proc_d.h +1 -1
  94. data/ext/pg_query/include/catalog/pg_publication.h +2 -5
  95. data/ext/pg_query/include/catalog/pg_publication_d.h +1 -1
  96. data/ext/pg_query/include/catalog/pg_replication_origin.h +1 -1
  97. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +1 -1
  98. data/ext/pg_query/include/catalog/pg_statistic.h +1 -1
  99. data/ext/pg_query/include/catalog/pg_statistic_d.h +1 -1
  100. data/ext/pg_query/include/catalog/pg_statistic_ext.h +1 -1
  101. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +1 -1
  102. data/ext/pg_query/include/catalog/pg_transform.h +1 -1
  103. data/ext/pg_query/include/catalog/pg_transform_d.h +1 -1
  104. data/ext/pg_query/include/catalog/pg_trigger.h +1 -1
  105. data/ext/pg_query/include/catalog/pg_trigger_d.h +1 -1
  106. data/ext/pg_query/include/catalog/pg_ts_config.h +1 -1
  107. data/ext/pg_query/include/catalog/pg_ts_config_d.h +1 -1
  108. data/ext/pg_query/include/catalog/pg_ts_dict.h +1 -1
  109. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +1 -1
  110. data/ext/pg_query/include/catalog/pg_ts_parser.h +1 -1
  111. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +1 -1
  112. data/ext/pg_query/include/catalog/pg_ts_template.h +1 -1
  113. data/ext/pg_query/include/catalog/pg_ts_template_d.h +1 -1
  114. data/ext/pg_query/include/catalog/pg_type.h +1 -1
  115. data/ext/pg_query/include/catalog/pg_type_d.h +1 -1
  116. data/ext/pg_query/include/catalog/storage.h +6 -6
  117. data/ext/pg_query/include/commands/async.h +1 -1
  118. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  119. data/ext/pg_query/include/commands/defrem.h +2 -1
  120. data/ext/pg_query/include/commands/event_trigger.h +1 -1
  121. data/ext/pg_query/include/commands/explain.h +3 -1
  122. data/ext/pg_query/include/commands/prepare.h +1 -1
  123. data/ext/pg_query/include/commands/tablespace.h +4 -4
  124. data/ext/pg_query/include/commands/trigger.h +15 -14
  125. data/ext/pg_query/include/commands/user.h +9 -3
  126. data/ext/pg_query/include/commands/vacuum.h +60 -14
  127. data/ext/pg_query/include/common/cryptohash.h +39 -0
  128. data/ext/pg_query/include/common/file_perm.h +1 -1
  129. data/ext/pg_query/include/common/hashfn.h +1 -1
  130. data/ext/pg_query/include/common/int.h +437 -0
  131. data/ext/pg_query/include/common/ip.h +4 -2
  132. data/ext/pg_query/include/common/keywords.h +1 -1
  133. data/ext/pg_query/include/common/kwlookup.h +2 -2
  134. data/ext/pg_query/include/common/pg_prng.h +3 -2
  135. data/ext/pg_query/include/common/relpath.h +20 -13
  136. data/ext/pg_query/include/common/scram-common.h +70 -0
  137. data/ext/pg_query/include/common/sha2.h +32 -0
  138. data/ext/pg_query/include/common/string.h +5 -3
  139. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +10 -10
  140. data/ext/pg_query/include/common/{unicode_combining_table.h → unicode_nonspacing_table.h} +31 -13
  141. data/ext/pg_query/include/copyfuncs.funcs.c +5013 -0
  142. data/ext/pg_query/include/copyfuncs.switch.c +938 -0
  143. data/ext/pg_query/include/datatype/timestamp.h +11 -4
  144. data/ext/pg_query/include/equalfuncs.funcs.c +3097 -0
  145. data/ext/pg_query/include/equalfuncs.switch.c +785 -0
  146. data/ext/pg_query/include/executor/execdesc.h +1 -1
  147. data/ext/pg_query/include/executor/executor.h +34 -17
  148. data/ext/pg_query/include/executor/functions.h +1 -1
  149. data/ext/pg_query/include/executor/instrument.h +1 -1
  150. data/ext/pg_query/include/executor/spi.h +2 -2
  151. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  152. data/ext/pg_query/include/executor/tuptable.h +18 -11
  153. data/ext/pg_query/include/fmgr.h +21 -2
  154. data/ext/pg_query/include/foreign/fdwapi.h +294 -0
  155. data/ext/pg_query/include/funcapi.h +12 -12
  156. data/ext/pg_query/include/gram.h +1127 -0
  157. data/ext/pg_query/include/{parser/gramparse.h → gramparse.h} +4 -4
  158. data/ext/pg_query/include/jit/jit.h +2 -2
  159. data/ext/pg_query/include/kwlist_d.h +534 -510
  160. data/ext/pg_query/include/lib/dshash.h +4 -1
  161. data/ext/pg_query/include/lib/ilist.h +435 -22
  162. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  163. data/ext/pg_query/include/lib/simplehash.h +9 -9
  164. data/ext/pg_query/include/lib/sort_template.h +1 -1
  165. data/ext/pg_query/include/lib/stringinfo.h +3 -3
  166. data/ext/pg_query/include/libpq/auth.h +8 -2
  167. data/ext/pg_query/include/libpq/crypt.h +1 -1
  168. data/ext/pg_query/include/libpq/hba.h +24 -17
  169. data/ext/pg_query/include/libpq/libpq-be.h +36 -25
  170. data/ext/pg_query/include/libpq/libpq.h +1 -1
  171. data/ext/pg_query/include/libpq/pqcomm.h +10 -41
  172. data/ext/pg_query/include/libpq/pqformat.h +2 -2
  173. data/ext/pg_query/include/libpq/pqsignal.h +22 -10
  174. data/ext/pg_query/include/libpq/sasl.h +136 -0
  175. data/ext/pg_query/include/libpq/scram.h +37 -0
  176. data/ext/pg_query/include/mb/pg_wchar.h +35 -18
  177. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  178. data/ext/pg_query/include/miscadmin.h +26 -14
  179. data/ext/pg_query/include/nodes/bitmapset.h +11 -7
  180. data/ext/pg_query/include/nodes/execnodes.h +83 -30
  181. data/ext/pg_query/include/nodes/extensible.h +5 -3
  182. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  183. data/ext/pg_query/include/nodes/makefuncs.h +14 -2
  184. data/ext/pg_query/include/nodes/memnodes.h +7 -4
  185. data/ext/pg_query/include/nodes/miscnodes.h +56 -0
  186. data/ext/pg_query/include/nodes/nodeFuncs.h +89 -29
  187. data/ext/pg_query/include/nodes/nodes.h +95 -510
  188. data/ext/pg_query/include/nodes/nodetags.h +471 -0
  189. data/ext/pg_query/include/nodes/params.h +3 -3
  190. data/ext/pg_query/include/nodes/parsenodes.h +377 -139
  191. data/ext/pg_query/include/nodes/pathnodes.h +1090 -440
  192. data/ext/pg_query/include/nodes/pg_list.h +30 -7
  193. data/ext/pg_query/include/nodes/plannodes.h +367 -124
  194. data/ext/pg_query/include/nodes/primnodes.h +670 -222
  195. data/ext/pg_query/include/nodes/print.h +1 -1
  196. data/ext/pg_query/include/{utils → nodes}/queryjumble.h +5 -7
  197. data/ext/pg_query/include/nodes/replnodes.h +111 -0
  198. data/ext/pg_query/include/nodes/supportnodes.h +346 -0
  199. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  200. data/ext/pg_query/include/nodes/value.h +12 -2
  201. data/ext/pg_query/include/optimizer/cost.h +6 -4
  202. data/ext/pg_query/include/optimizer/geqo.h +1 -1
  203. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  204. data/ext/pg_query/include/optimizer/optimizer.h +8 -8
  205. data/ext/pg_query/include/optimizer/paths.h +16 -7
  206. data/ext/pg_query/include/optimizer/planmain.h +3 -6
  207. data/ext/pg_query/include/parser/analyze.h +4 -3
  208. data/ext/pg_query/include/parser/kwlist.h +12 -1
  209. data/ext/pg_query/include/parser/parse_agg.h +4 -2
  210. data/ext/pg_query/include/parser/parse_coerce.h +3 -1
  211. data/ext/pg_query/include/parser/parse_expr.h +1 -1
  212. data/ext/pg_query/include/parser/parse_func.h +1 -1
  213. data/ext/pg_query/include/parser/parse_node.h +22 -4
  214. data/ext/pg_query/include/parser/parse_oper.h +3 -3
  215. data/ext/pg_query/include/parser/parse_relation.h +8 -3
  216. data/ext/pg_query/include/parser/parse_type.h +4 -3
  217. data/ext/pg_query/include/parser/parser.h +1 -1
  218. data/ext/pg_query/include/parser/parsetree.h +1 -1
  219. data/ext/pg_query/include/parser/scanner.h +2 -2
  220. data/ext/pg_query/include/parser/scansup.h +1 -1
  221. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  222. data/ext/pg_query/include/pg_config.h +21 -216
  223. data/ext/pg_query/include/pg_config_manual.h +8 -46
  224. data/ext/pg_query/include/pg_getopt.h +1 -1
  225. data/ext/pg_query/include/pg_query.h +27 -3
  226. data/ext/pg_query/include/pg_query_enum_defs.c +311 -149
  227. data/ext/pg_query/include/pg_query_fingerprint_conds.c +545 -489
  228. data/ext/pg_query/include/pg_query_fingerprint_defs.c +5092 -4432
  229. data/ext/pg_query/include/pg_query_outfuncs_conds.c +385 -343
  230. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1294 -1161
  231. data/ext/pg_query/include/pg_query_readfuncs_conds.c +137 -123
  232. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1657 -1496
  233. data/ext/pg_query/include/pg_trace.h +1 -1
  234. data/ext/pg_query/include/pgstat.h +172 -93
  235. data/ext/pg_query/include/pgtime.h +3 -3
  236. data/ext/pg_query/include/pl_gram.h +64 -62
  237. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  238. data/ext/pg_query/include/pl_reserved_kwlist_d.h +1 -1
  239. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -1
  240. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +48 -46
  241. data/ext/pg_query/include/plpgsql.h +17 -22
  242. data/ext/pg_query/include/port/atomics/arch-arm.h +3 -3
  243. data/ext/pg_query/include/port/atomics/arch-ppc.h +21 -21
  244. data/ext/pg_query/include/port/atomics/arch-x86.h +2 -2
  245. data/ext/pg_query/include/port/atomics/fallback.h +3 -3
  246. data/ext/pg_query/include/port/atomics/generic-gcc.h +1 -1
  247. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  248. data/ext/pg_query/include/port/atomics.h +2 -7
  249. data/ext/pg_query/include/port/pg_bitutils.h +62 -25
  250. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  251. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  252. data/ext/pg_query/include/port/simd.h +375 -0
  253. data/ext/pg_query/include/port.h +42 -75
  254. data/ext/pg_query/include/portability/instr_time.h +81 -140
  255. data/ext/pg_query/include/postgres.h +205 -434
  256. data/ext/pg_query/include/postgres_ext.h +0 -1
  257. data/ext/pg_query/include/postmaster/autovacuum.h +1 -4
  258. data/ext/pg_query/include/postmaster/auxprocess.h +1 -1
  259. data/ext/pg_query/include/postmaster/bgworker.h +2 -2
  260. data/ext/pg_query/include/postmaster/bgworker_internals.h +1 -1
  261. data/ext/pg_query/include/postmaster/bgwriter.h +2 -2
  262. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  263. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  264. data/ext/pg_query/include/postmaster/pgarch.h +1 -38
  265. data/ext/pg_query/include/postmaster/postmaster.h +5 -2
  266. data/ext/pg_query/include/postmaster/startup.h +3 -1
  267. data/ext/pg_query/include/postmaster/syslogger.h +2 -2
  268. data/ext/pg_query/include/postmaster/walwriter.h +3 -1
  269. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +6186 -5585
  270. data/ext/pg_query/include/protobuf/pg_query.pb.h +112443 -91222
  271. data/ext/pg_query/include/regex/regex.h +9 -6
  272. data/ext/pg_query/include/replication/logicallauncher.h +6 -1
  273. data/ext/pg_query/include/replication/logicalproto.h +30 -10
  274. data/ext/pg_query/include/replication/logicalworker.h +14 -1
  275. data/ext/pg_query/include/replication/origin.h +4 -4
  276. data/ext/pg_query/include/replication/reorderbuffer.h +113 -45
  277. data/ext/pg_query/include/replication/slot.h +25 -6
  278. data/ext/pg_query/include/replication/syncrep.h +2 -8
  279. data/ext/pg_query/include/replication/walreceiver.h +15 -9
  280. data/ext/pg_query/include/replication/walsender.h +13 -13
  281. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  282. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -4
  283. data/ext/pg_query/include/rewrite/rewriteManip.h +11 -2
  284. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  285. data/ext/pg_query/include/src_backend_nodes_copyfuncs.funcs.c +5321 -0
  286. data/ext/pg_query/include/src_backend_nodes_equalfuncs.funcs.c +3354 -0
  287. data/ext/pg_query/include/storage/backendid.h +1 -1
  288. data/ext/pg_query/include/storage/block.h +24 -31
  289. data/ext/pg_query/include/storage/buf.h +1 -1
  290. data/ext/pg_query/include/storage/bufmgr.h +183 -87
  291. data/ext/pg_query/include/storage/bufpage.h +146 -93
  292. data/ext/pg_query/include/storage/condition_variable.h +2 -2
  293. data/ext/pg_query/include/storage/dsm.h +3 -6
  294. data/ext/pg_query/include/storage/dsm_impl.h +4 -1
  295. data/ext/pg_query/include/storage/fd.h +24 -20
  296. data/ext/pg_query/include/storage/fileset.h +1 -1
  297. data/ext/pg_query/include/storage/ipc.h +1 -1
  298. data/ext/pg_query/include/storage/item.h +1 -1
  299. data/ext/pg_query/include/storage/itemid.h +1 -1
  300. data/ext/pg_query/include/storage/itemptr.h +94 -57
  301. data/ext/pg_query/include/storage/large_object.h +1 -1
  302. data/ext/pg_query/include/storage/latch.h +9 -1
  303. data/ext/pg_query/include/storage/lmgr.h +6 -1
  304. data/ext/pg_query/include/storage/lock.h +21 -13
  305. data/ext/pg_query/include/storage/lockdefs.h +3 -3
  306. data/ext/pg_query/include/storage/lwlock.h +16 -2
  307. data/ext/pg_query/include/storage/off.h +1 -1
  308. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  309. data/ext/pg_query/include/storage/pg_shmem.h +1 -1
  310. data/ext/pg_query/include/storage/pmsignal.h +1 -1
  311. data/ext/pg_query/include/storage/predicate.h +2 -2
  312. data/ext/pg_query/include/storage/proc.h +22 -17
  313. data/ext/pg_query/include/storage/procarray.h +3 -2
  314. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  315. data/ext/pg_query/include/storage/procsignal.h +3 -1
  316. data/ext/pg_query/include/storage/relfilelocator.h +99 -0
  317. data/ext/pg_query/include/storage/s_lock.h +66 -309
  318. data/ext/pg_query/include/storage/sharedfileset.h +1 -1
  319. data/ext/pg_query/include/storage/shm_mq.h +1 -1
  320. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  321. data/ext/pg_query/include/storage/shmem.h +1 -23
  322. data/ext/pg_query/include/storage/sinval.h +3 -3
  323. data/ext/pg_query/include/storage/sinvaladt.h +4 -2
  324. data/ext/pg_query/include/storage/smgr.h +12 -10
  325. data/ext/pg_query/include/storage/spin.h +1 -1
  326. data/ext/pg_query/include/storage/standby.h +9 -8
  327. data/ext/pg_query/include/storage/standbydefs.h +1 -1
  328. data/ext/pg_query/include/storage/sync.h +3 -3
  329. data/ext/pg_query/include/tcop/cmdtag.h +7 -2
  330. data/ext/pg_query/include/tcop/cmdtaglist.h +1 -1
  331. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  332. data/ext/pg_query/include/tcop/dest.h +1 -3
  333. data/ext/pg_query/include/tcop/fastpath.h +1 -1
  334. data/ext/pg_query/include/tcop/pquery.h +1 -1
  335. data/ext/pg_query/include/tcop/tcopprot.h +1 -4
  336. data/ext/pg_query/include/tcop/utility.h +1 -1
  337. data/ext/pg_query/include/tsearch/ts_cache.h +2 -4
  338. data/ext/pg_query/include/utils/acl.h +26 -81
  339. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  340. data/ext/pg_query/include/utils/array.h +19 -1
  341. data/ext/pg_query/include/utils/backend_progress.h +2 -1
  342. data/ext/pg_query/include/utils/backend_status.h +24 -3
  343. data/ext/pg_query/include/utils/builtins.h +14 -5
  344. data/ext/pg_query/include/utils/bytea.h +1 -1
  345. data/ext/pg_query/include/utils/catcache.h +1 -1
  346. data/ext/pg_query/include/utils/date.h +37 -9
  347. data/ext/pg_query/include/utils/datetime.h +41 -21
  348. data/ext/pg_query/include/utils/datum.h +1 -1
  349. data/ext/pg_query/include/utils/dsa.h +5 -1
  350. data/ext/pg_query/include/utils/elog.h +101 -26
  351. data/ext/pg_query/include/utils/expandeddatum.h +14 -3
  352. data/ext/pg_query/include/utils/expandedrecord.h +14 -4
  353. data/ext/pg_query/include/utils/float.h +7 -6
  354. data/ext/pg_query/include/utils/fmgroids.h +54 -1
  355. data/ext/pg_query/include/utils/fmgrprotos.h +45 -3
  356. data/ext/pg_query/include/utils/fmgrtab.h +1 -1
  357. data/ext/pg_query/include/utils/guc.h +55 -82
  358. data/ext/pg_query/include/utils/guc_hooks.h +163 -0
  359. data/ext/pg_query/include/utils/guc_tables.h +49 -3
  360. data/ext/pg_query/include/utils/hsearch.h +1 -1
  361. data/ext/pg_query/include/utils/inval.h +3 -3
  362. data/ext/pg_query/include/utils/logtape.h +77 -0
  363. data/ext/pg_query/include/utils/lsyscache.h +5 -1
  364. data/ext/pg_query/include/utils/memdebug.h +1 -1
  365. data/ext/pg_query/include/utils/memutils.h +5 -49
  366. data/ext/pg_query/include/utils/memutils_internal.h +136 -0
  367. data/ext/pg_query/include/utils/memutils_memorychunk.h +237 -0
  368. data/ext/pg_query/include/utils/numeric.h +20 -5
  369. data/ext/pg_query/include/utils/palloc.h +8 -1
  370. data/ext/pg_query/include/utils/partcache.h +3 -2
  371. data/ext/pg_query/include/utils/pg_locale.h +22 -14
  372. data/ext/pg_query/include/utils/pgstat_internal.h +37 -7
  373. data/ext/pg_query/include/utils/pidfile.h +1 -1
  374. data/ext/pg_query/include/utils/plancache.h +1 -1
  375. data/ext/pg_query/include/utils/portal.h +1 -1
  376. data/ext/pg_query/include/utils/probes.h +6 -6
  377. data/ext/pg_query/include/utils/ps_status.h +23 -1
  378. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  379. data/ext/pg_query/include/utils/regproc.h +3 -3
  380. data/ext/pg_query/include/utils/rel.h +60 -43
  381. data/ext/pg_query/include/utils/relcache.h +13 -8
  382. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  383. data/ext/pg_query/include/utils/resowner.h +1 -1
  384. data/ext/pg_query/include/utils/ruleutils.h +6 -1
  385. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  386. data/ext/pg_query/include/utils/snapmgr.h +4 -2
  387. data/ext/pg_query/include/utils/snapshot.h +1 -1
  388. data/ext/pg_query/include/utils/sortsupport.h +2 -2
  389. data/ext/pg_query/include/utils/syscache.h +4 -1
  390. data/ext/pg_query/include/utils/timeout.h +1 -1
  391. data/ext/pg_query/include/utils/timestamp.h +41 -11
  392. data/ext/pg_query/include/utils/tuplesort.h +189 -35
  393. data/ext/pg_query/include/utils/tuplestore.h +1 -1
  394. data/ext/pg_query/include/utils/typcache.h +1 -1
  395. data/ext/pg_query/include/utils/varlena.h +13 -1
  396. data/ext/pg_query/include/utils/wait_event.h +9 -4
  397. data/ext/pg_query/include/utils/xml.h +15 -5
  398. data/ext/pg_query/include/varatt.h +358 -0
  399. data/ext/pg_query/pg_query.c +1 -1
  400. data/ext/pg_query/pg_query.pb-c.c +19755 -17757
  401. data/ext/pg_query/pg_query_fingerprint.c +8 -3
  402. data/ext/pg_query/pg_query_fingerprint.h +1 -1
  403. data/ext/pg_query/pg_query_internal.h +1 -1
  404. data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
  405. data/ext/pg_query/pg_query_normalize.c +1 -1
  406. data/ext/pg_query/pg_query_outfuncs_protobuf.c +2 -2
  407. data/ext/pg_query/pg_query_parse.c +46 -4
  408. data/ext/pg_query/pg_query_parse_plpgsql.c +1 -1
  409. data/ext/pg_query/pg_query_scan.c +1 -1
  410. data/ext/pg_query/pg_query_split.c +2 -2
  411. data/ext/pg_query/postgres_deparse.c +503 -105
  412. data/ext/pg_query/src_backend_catalog_namespace.c +7 -2
  413. data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -1
  414. data/ext/pg_query/src_backend_commands_define.c +1 -1
  415. data/ext/pg_query/src_backend_nodes_bitmapset.c +11 -70
  416. data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
  417. data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
  418. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  419. data/ext/pg_query/src_backend_nodes_list.c +14 -2
  420. data/ext/pg_query/src_backend_nodes_makefuncs.c +95 -1
  421. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +283 -132
  422. data/ext/pg_query/src_backend_nodes_value.c +1 -1
  423. data/ext/pg_query/src_backend_parser_gram.c +33208 -31806
  424. data/ext/pg_query/src_backend_parser_parser.c +28 -2
  425. data/ext/pg_query/src_backend_parser_scan.c +4318 -3329
  426. data/ext/pg_query/src_backend_parser_scansup.c +1 -1
  427. data/ext/pg_query/src_backend_postmaster_postmaster.c +129 -110
  428. data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
  429. data/ext/pg_query/src_backend_tcop_postgres.c +66 -87
  430. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +1 -1
  431. data/ext/pg_query/src_backend_utils_adt_datum.c +5 -7
  432. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  433. data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
  434. data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
  435. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +79 -5
  436. data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
  437. data/ext/pg_query/src_backend_utils_error_elog.c +354 -97
  438. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +33 -1
  439. data/ext/pg_query/src_backend_utils_init_globals.c +5 -2
  440. data/ext/pg_query/src_backend_utils_mb_mbutils.c +13 -4
  441. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +494 -0
  442. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
  443. data/ext/pg_query/src_backend_utils_mmgr_aset.c +449 -312
  444. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
  445. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +398 -49
  446. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
  447. data/ext/pg_query/src_common_encnames.c +4 -1
  448. data/ext/pg_query/src_common_hashfn.c +1 -1
  449. data/ext/pg_query/src_common_keywords.c +1 -1
  450. data/ext/pg_query/src_common_kwlist_d.h +534 -510
  451. data/ext/pg_query/src_common_kwlookup.c +1 -1
  452. data/ext/pg_query/src_common_psprintf.c +1 -1
  453. data/ext/pg_query/src_common_stringinfo.c +4 -4
  454. data/ext/pg_query/src_common_wchar.c +9 -8
  455. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1 -1
  456. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
  457. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +661 -694
  458. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  459. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
  460. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +1 -1
  461. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
  462. data/ext/pg_query/src_port_pg_bitutils.c +1 -1
  463. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  464. data/ext/pg_query/src_port_snprintf.c +3 -7
  465. data/ext/pg_query/src_port_strerror.c +1 -1
  466. data/ext/pg_query/src_port_strnlen.c +1 -1
  467. data/lib/pg_query/pg_query_pb.rb +166 -3191
  468. data/lib/pg_query/treewalker.rb +7 -2
  469. data/lib/pg_query/version.rb +1 -1
  470. metadata +43 -24
  471. data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
  472. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
  473. data/ext/pg_query/include/commands/variable.h +0 -38
  474. data/ext/pg_query/include/getaddrinfo.h +0 -162
  475. data/ext/pg_query/include/parser/gram.h +0 -1101
  476. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  477. data/ext/pg_query/include/utils/dynahash.h +0 -20
  478. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  479. data/ext/pg_query/include/utils/rls.h +0 -50
  480. data/ext/pg_query/include/utils/tzparser.h +0 -39
  481. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -371
  482. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
  483. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
  484. data/ext/pg_query/src_common_pg_prng.c +0 -152
  485. data/ext/pg_query/src_common_string.c +0 -92
  486. data/ext/pg_query/src_port_pgsleep.c +0 -69
@@ -7,7 +7,7 @@
7
7
  * Client-side code should include postgres_fe.h instead.
8
8
  *
9
9
  *
10
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
10
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
11
11
  * Portions Copyright (c) 1995, Regents of the University of California
12
12
  *
13
13
  * src/include/postgres.h
@@ -23,8 +23,8 @@
23
23
  *
24
24
  * section description
25
25
  * ------- ------------------------------------------------
26
- * 1) variable-length datatypes (TOAST support)
27
- * 2) Datum type + support macros
26
+ * 1) Datum type + support functions
27
+ * 2) miscellaneous
28
28
  *
29
29
  * NOTES
30
30
  *
@@ -35,8 +35,7 @@
35
35
  * postgres_fe.h. We do that since those type definitions are needed by
36
36
  * frontend modules that want to deal with binary data transmission to or
37
37
  * from the backend. Type definitions in this file should be for
38
- * representations that never escape the backend, such as Datum or
39
- * TOASTed varlena objects.
38
+ * representations that never escape the backend, such as Datum.
40
39
  *
41
40
  *----------------------------------------------------------------
42
41
  */
@@ -48,353 +47,7 @@
48
47
  #include "utils/palloc.h"
49
48
 
50
49
  /* ----------------------------------------------------------------
51
- * Section 1: variable-length datatypes (TOAST support)
52
- * ----------------------------------------------------------------
53
- */
54
-
55
- /*
56
- * struct varatt_external is a traditional "TOAST pointer", that is, the
57
- * information needed to fetch a Datum stored out-of-line in a TOAST table.
58
- * The data is compressed if and only if the external size stored in
59
- * va_extinfo is less than va_rawsize - VARHDRSZ.
60
- *
61
- * This struct must not contain any padding, because we sometimes compare
62
- * these pointers using memcmp.
63
- *
64
- * Note that this information is stored unaligned within actual tuples, so
65
- * you need to memcpy from the tuple into a local struct variable before
66
- * you can look at these fields! (The reason we use memcmp is to avoid
67
- * having to do that just to detect equality of two TOAST pointers...)
68
- */
69
- typedef struct varatt_external
70
- {
71
- int32 va_rawsize; /* Original data size (includes header) */
72
- uint32 va_extinfo; /* External saved size (without header) and
73
- * compression method */
74
- Oid va_valueid; /* Unique ID of value within TOAST table */
75
- Oid va_toastrelid; /* RelID of TOAST table containing it */
76
- } varatt_external;
77
-
78
- /*
79
- * These macros define the "saved size" portion of va_extinfo. Its remaining
80
- * two high-order bits identify the compression method.
81
- */
82
- #define VARLENA_EXTSIZE_BITS 30
83
- #define VARLENA_EXTSIZE_MASK ((1U << VARLENA_EXTSIZE_BITS) - 1)
84
-
85
- /*
86
- * struct varatt_indirect is a "TOAST pointer" representing an out-of-line
87
- * Datum that's stored in memory, not in an external toast relation.
88
- * The creator of such a Datum is entirely responsible that the referenced
89
- * storage survives for as long as referencing pointer Datums can exist.
90
- *
91
- * Note that just as for struct varatt_external, this struct is stored
92
- * unaligned within any containing tuple.
93
- */
94
- typedef struct varatt_indirect
95
- {
96
- struct varlena *pointer; /* Pointer to in-memory varlena */
97
- } varatt_indirect;
98
-
99
- /*
100
- * struct varatt_expanded is a "TOAST pointer" representing an out-of-line
101
- * Datum that is stored in memory, in some type-specific, not necessarily
102
- * physically contiguous format that is convenient for computation not
103
- * storage. APIs for this, in particular the definition of struct
104
- * ExpandedObjectHeader, are in src/include/utils/expandeddatum.h.
105
- *
106
- * Note that just as for struct varatt_external, this struct is stored
107
- * unaligned within any containing tuple.
108
- */
109
- typedef struct ExpandedObjectHeader ExpandedObjectHeader;
110
-
111
- typedef struct varatt_expanded
112
- {
113
- ExpandedObjectHeader *eohptr;
114
- } varatt_expanded;
115
-
116
- /*
117
- * Type tag for the various sorts of "TOAST pointer" datums. The peculiar
118
- * value for VARTAG_ONDISK comes from a requirement for on-disk compatibility
119
- * with a previous notion that the tag field was the pointer datum's length.
120
- */
121
- typedef enum vartag_external
122
- {
123
- VARTAG_INDIRECT = 1,
124
- VARTAG_EXPANDED_RO = 2,
125
- VARTAG_EXPANDED_RW = 3,
126
- VARTAG_ONDISK = 18
127
- } vartag_external;
128
-
129
- /* this test relies on the specific tag values above */
130
- #define VARTAG_IS_EXPANDED(tag) \
131
- (((tag) & ~1) == VARTAG_EXPANDED_RO)
132
-
133
- #define VARTAG_SIZE(tag) \
134
- ((tag) == VARTAG_INDIRECT ? sizeof(varatt_indirect) : \
135
- VARTAG_IS_EXPANDED(tag) ? sizeof(varatt_expanded) : \
136
- (tag) == VARTAG_ONDISK ? sizeof(varatt_external) : \
137
- TrapMacro(true, "unrecognized TOAST vartag"))
138
-
139
- /*
140
- * These structs describe the header of a varlena object that may have been
141
- * TOASTed. Generally, don't reference these structs directly, but use the
142
- * macros below.
143
- *
144
- * We use separate structs for the aligned and unaligned cases because the
145
- * compiler might otherwise think it could generate code that assumes
146
- * alignment while touching fields of a 1-byte-header varlena.
147
- */
148
- typedef union
149
- {
150
- struct /* Normal varlena (4-byte length) */
151
- {
152
- uint32 va_header;
153
- char va_data[FLEXIBLE_ARRAY_MEMBER];
154
- } va_4byte;
155
- struct /* Compressed-in-line format */
156
- {
157
- uint32 va_header;
158
- uint32 va_tcinfo; /* Original data size (excludes header) and
159
- * compression method; see va_extinfo */
160
- char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Compressed data */
161
- } va_compressed;
162
- } varattrib_4b;
163
-
164
- typedef struct
165
- {
166
- uint8 va_header;
167
- char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Data begins here */
168
- } varattrib_1b;
169
-
170
- /* TOAST pointers are a subset of varattrib_1b with an identifying tag byte */
171
- typedef struct
172
- {
173
- uint8 va_header; /* Always 0x80 or 0x01 */
174
- uint8 va_tag; /* Type of datum */
175
- char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Type-specific data */
176
- } varattrib_1b_e;
177
-
178
- /*
179
- * Bit layouts for varlena headers on big-endian machines:
180
- *
181
- * 00xxxxxx 4-byte length word, aligned, uncompressed data (up to 1G)
182
- * 01xxxxxx 4-byte length word, aligned, *compressed* data (up to 1G)
183
- * 10000000 1-byte length word, unaligned, TOAST pointer
184
- * 1xxxxxxx 1-byte length word, unaligned, uncompressed data (up to 126b)
185
- *
186
- * Bit layouts for varlena headers on little-endian machines:
187
- *
188
- * xxxxxx00 4-byte length word, aligned, uncompressed data (up to 1G)
189
- * xxxxxx10 4-byte length word, aligned, *compressed* data (up to 1G)
190
- * 00000001 1-byte length word, unaligned, TOAST pointer
191
- * xxxxxxx1 1-byte length word, unaligned, uncompressed data (up to 126b)
192
- *
193
- * The "xxx" bits are the length field (which includes itself in all cases).
194
- * In the big-endian case we mask to extract the length, in the little-endian
195
- * case we shift. Note that in both cases the flag bits are in the physically
196
- * first byte. Also, it is not possible for a 1-byte length word to be zero;
197
- * this lets us disambiguate alignment padding bytes from the start of an
198
- * unaligned datum. (We now *require* pad bytes to be filled with zero!)
199
- *
200
- * In TOAST pointers the va_tag field (see varattrib_1b_e) is used to discern
201
- * the specific type and length of the pointer datum.
202
- */
203
-
204
- /*
205
- * Endian-dependent macros. These are considered internal --- use the
206
- * external macros below instead of using these directly.
207
- *
208
- * Note: IS_1B is true for external toast records but VARSIZE_1B will return 0
209
- * for such records. Hence you should usually check for IS_EXTERNAL before
210
- * checking for IS_1B.
211
- */
212
-
213
- #ifdef WORDS_BIGENDIAN
214
-
215
- #define VARATT_IS_4B(PTR) \
216
- ((((varattrib_1b *) (PTR))->va_header & 0x80) == 0x00)
217
- #define VARATT_IS_4B_U(PTR) \
218
- ((((varattrib_1b *) (PTR))->va_header & 0xC0) == 0x00)
219
- #define VARATT_IS_4B_C(PTR) \
220
- ((((varattrib_1b *) (PTR))->va_header & 0xC0) == 0x40)
221
- #define VARATT_IS_1B(PTR) \
222
- ((((varattrib_1b *) (PTR))->va_header & 0x80) == 0x80)
223
- #define VARATT_IS_1B_E(PTR) \
224
- ((((varattrib_1b *) (PTR))->va_header) == 0x80)
225
- #define VARATT_NOT_PAD_BYTE(PTR) \
226
- (*((uint8 *) (PTR)) != 0)
227
-
228
- /* VARSIZE_4B() should only be used on known-aligned data */
229
- #define VARSIZE_4B(PTR) \
230
- (((varattrib_4b *) (PTR))->va_4byte.va_header & 0x3FFFFFFF)
231
- #define VARSIZE_1B(PTR) \
232
- (((varattrib_1b *) (PTR))->va_header & 0x7F)
233
- #define VARTAG_1B_E(PTR) \
234
- (((varattrib_1b_e *) (PTR))->va_tag)
235
-
236
- #define SET_VARSIZE_4B(PTR,len) \
237
- (((varattrib_4b *) (PTR))->va_4byte.va_header = (len) & 0x3FFFFFFF)
238
- #define SET_VARSIZE_4B_C(PTR,len) \
239
- (((varattrib_4b *) (PTR))->va_4byte.va_header = ((len) & 0x3FFFFFFF) | 0x40000000)
240
- #define SET_VARSIZE_1B(PTR,len) \
241
- (((varattrib_1b *) (PTR))->va_header = (len) | 0x80)
242
- #define SET_VARTAG_1B_E(PTR,tag) \
243
- (((varattrib_1b_e *) (PTR))->va_header = 0x80, \
244
- ((varattrib_1b_e *) (PTR))->va_tag = (tag))
245
-
246
- #else /* !WORDS_BIGENDIAN */
247
-
248
- #define VARATT_IS_4B(PTR) \
249
- ((((varattrib_1b *) (PTR))->va_header & 0x01) == 0x00)
250
- #define VARATT_IS_4B_U(PTR) \
251
- ((((varattrib_1b *) (PTR))->va_header & 0x03) == 0x00)
252
- #define VARATT_IS_4B_C(PTR) \
253
- ((((varattrib_1b *) (PTR))->va_header & 0x03) == 0x02)
254
- #define VARATT_IS_1B(PTR) \
255
- ((((varattrib_1b *) (PTR))->va_header & 0x01) == 0x01)
256
- #define VARATT_IS_1B_E(PTR) \
257
- ((((varattrib_1b *) (PTR))->va_header) == 0x01)
258
- #define VARATT_NOT_PAD_BYTE(PTR) \
259
- (*((uint8 *) (PTR)) != 0)
260
-
261
- /* VARSIZE_4B() should only be used on known-aligned data */
262
- #define VARSIZE_4B(PTR) \
263
- ((((varattrib_4b *) (PTR))->va_4byte.va_header >> 2) & 0x3FFFFFFF)
264
- #define VARSIZE_1B(PTR) \
265
- ((((varattrib_1b *) (PTR))->va_header >> 1) & 0x7F)
266
- #define VARTAG_1B_E(PTR) \
267
- (((varattrib_1b_e *) (PTR))->va_tag)
268
-
269
- #define SET_VARSIZE_4B(PTR,len) \
270
- (((varattrib_4b *) (PTR))->va_4byte.va_header = (((uint32) (len)) << 2))
271
- #define SET_VARSIZE_4B_C(PTR,len) \
272
- (((varattrib_4b *) (PTR))->va_4byte.va_header = (((uint32) (len)) << 2) | 0x02)
273
- #define SET_VARSIZE_1B(PTR,len) \
274
- (((varattrib_1b *) (PTR))->va_header = (((uint8) (len)) << 1) | 0x01)
275
- #define SET_VARTAG_1B_E(PTR,tag) \
276
- (((varattrib_1b_e *) (PTR))->va_header = 0x01, \
277
- ((varattrib_1b_e *) (PTR))->va_tag = (tag))
278
-
279
- #endif /* WORDS_BIGENDIAN */
280
-
281
- #define VARDATA_4B(PTR) (((varattrib_4b *) (PTR))->va_4byte.va_data)
282
- #define VARDATA_4B_C(PTR) (((varattrib_4b *) (PTR))->va_compressed.va_data)
283
- #define VARDATA_1B(PTR) (((varattrib_1b *) (PTR))->va_data)
284
- #define VARDATA_1B_E(PTR) (((varattrib_1b_e *) (PTR))->va_data)
285
-
286
- /*
287
- * Externally visible TOAST macros begin here.
288
- */
289
-
290
- #define VARHDRSZ_EXTERNAL offsetof(varattrib_1b_e, va_data)
291
- #define VARHDRSZ_COMPRESSED offsetof(varattrib_4b, va_compressed.va_data)
292
- #define VARHDRSZ_SHORT offsetof(varattrib_1b, va_data)
293
-
294
- #define VARATT_SHORT_MAX 0x7F
295
- #define VARATT_CAN_MAKE_SHORT(PTR) \
296
- (VARATT_IS_4B_U(PTR) && \
297
- (VARSIZE(PTR) - VARHDRSZ + VARHDRSZ_SHORT) <= VARATT_SHORT_MAX)
298
- #define VARATT_CONVERTED_SHORT_SIZE(PTR) \
299
- (VARSIZE(PTR) - VARHDRSZ + VARHDRSZ_SHORT)
300
-
301
- /*
302
- * In consumers oblivious to data alignment, call PG_DETOAST_DATUM_PACKED(),
303
- * VARDATA_ANY(), VARSIZE_ANY() and VARSIZE_ANY_EXHDR(). Elsewhere, call
304
- * PG_DETOAST_DATUM(), VARDATA() and VARSIZE(). Directly fetching an int16,
305
- * int32 or wider field in the struct representing the datum layout requires
306
- * aligned data. memcpy() is alignment-oblivious, as are most operations on
307
- * datatypes, such as text, whose layout struct contains only char fields.
308
- *
309
- * Code assembling a new datum should call VARDATA() and SET_VARSIZE().
310
- * (Datums begin life untoasted.)
311
- *
312
- * Other macros here should usually be used only by tuple assembly/disassembly
313
- * code and code that specifically wants to work with still-toasted Datums.
314
- */
315
- #define VARDATA(PTR) VARDATA_4B(PTR)
316
- #define VARSIZE(PTR) VARSIZE_4B(PTR)
317
-
318
- #define VARSIZE_SHORT(PTR) VARSIZE_1B(PTR)
319
- #define VARDATA_SHORT(PTR) VARDATA_1B(PTR)
320
-
321
- #define VARTAG_EXTERNAL(PTR) VARTAG_1B_E(PTR)
322
- #define VARSIZE_EXTERNAL(PTR) (VARHDRSZ_EXTERNAL + VARTAG_SIZE(VARTAG_EXTERNAL(PTR)))
323
- #define VARDATA_EXTERNAL(PTR) VARDATA_1B_E(PTR)
324
-
325
- #define VARATT_IS_COMPRESSED(PTR) VARATT_IS_4B_C(PTR)
326
- #define VARATT_IS_EXTERNAL(PTR) VARATT_IS_1B_E(PTR)
327
- #define VARATT_IS_EXTERNAL_ONDISK(PTR) \
328
- (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_ONDISK)
329
- #define VARATT_IS_EXTERNAL_INDIRECT(PTR) \
330
- (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_INDIRECT)
331
- #define VARATT_IS_EXTERNAL_EXPANDED_RO(PTR) \
332
- (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_EXPANDED_RO)
333
- #define VARATT_IS_EXTERNAL_EXPANDED_RW(PTR) \
334
- (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_EXPANDED_RW)
335
- #define VARATT_IS_EXTERNAL_EXPANDED(PTR) \
336
- (VARATT_IS_EXTERNAL(PTR) && VARTAG_IS_EXPANDED(VARTAG_EXTERNAL(PTR)))
337
- #define VARATT_IS_EXTERNAL_NON_EXPANDED(PTR) \
338
- (VARATT_IS_EXTERNAL(PTR) && !VARTAG_IS_EXPANDED(VARTAG_EXTERNAL(PTR)))
339
- #define VARATT_IS_SHORT(PTR) VARATT_IS_1B(PTR)
340
- #define VARATT_IS_EXTENDED(PTR) (!VARATT_IS_4B_U(PTR))
341
-
342
- #define SET_VARSIZE(PTR, len) SET_VARSIZE_4B(PTR, len)
343
- #define SET_VARSIZE_SHORT(PTR, len) SET_VARSIZE_1B(PTR, len)
344
- #define SET_VARSIZE_COMPRESSED(PTR, len) SET_VARSIZE_4B_C(PTR, len)
345
-
346
- #define SET_VARTAG_EXTERNAL(PTR, tag) SET_VARTAG_1B_E(PTR, tag)
347
-
348
- #define VARSIZE_ANY(PTR) \
349
- (VARATT_IS_1B_E(PTR) ? VARSIZE_EXTERNAL(PTR) : \
350
- (VARATT_IS_1B(PTR) ? VARSIZE_1B(PTR) : \
351
- VARSIZE_4B(PTR)))
352
-
353
- /* Size of a varlena data, excluding header */
354
- #define VARSIZE_ANY_EXHDR(PTR) \
355
- (VARATT_IS_1B_E(PTR) ? VARSIZE_EXTERNAL(PTR)-VARHDRSZ_EXTERNAL : \
356
- (VARATT_IS_1B(PTR) ? VARSIZE_1B(PTR)-VARHDRSZ_SHORT : \
357
- VARSIZE_4B(PTR)-VARHDRSZ))
358
-
359
- /* caution: this will not work on an external or compressed-in-line Datum */
360
- /* caution: this will return a possibly unaligned pointer */
361
- #define VARDATA_ANY(PTR) \
362
- (VARATT_IS_1B(PTR) ? VARDATA_1B(PTR) : VARDATA_4B(PTR))
363
-
364
- /* Decompressed size and compression method of a compressed-in-line Datum */
365
- #define VARDATA_COMPRESSED_GET_EXTSIZE(PTR) \
366
- (((varattrib_4b *) (PTR))->va_compressed.va_tcinfo & VARLENA_EXTSIZE_MASK)
367
- #define VARDATA_COMPRESSED_GET_COMPRESS_METHOD(PTR) \
368
- (((varattrib_4b *) (PTR))->va_compressed.va_tcinfo >> VARLENA_EXTSIZE_BITS)
369
-
370
- /* Same for external Datums; but note argument is a struct varatt_external */
371
- #define VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) \
372
- ((toast_pointer).va_extinfo & VARLENA_EXTSIZE_MASK)
373
- #define VARATT_EXTERNAL_GET_COMPRESS_METHOD(toast_pointer) \
374
- ((toast_pointer).va_extinfo >> VARLENA_EXTSIZE_BITS)
375
-
376
- #define VARATT_EXTERNAL_SET_SIZE_AND_COMPRESS_METHOD(toast_pointer, len, cm) \
377
- do { \
378
- Assert((cm) == TOAST_PGLZ_COMPRESSION_ID || \
379
- (cm) == TOAST_LZ4_COMPRESSION_ID); \
380
- ((toast_pointer).va_extinfo = \
381
- (len) | ((uint32) (cm) << VARLENA_EXTSIZE_BITS)); \
382
- } while (0)
383
-
384
- /*
385
- * Testing whether an externally-stored value is compressed now requires
386
- * comparing size stored in va_extinfo (the actual length of the external data)
387
- * to rawsize (the original uncompressed datum's size). The latter includes
388
- * VARHDRSZ overhead, the former doesn't. We never use compression unless it
389
- * actually saves space, so we expect either equality or less-than.
390
- */
391
- #define VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer) \
392
- (VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) < \
393
- (toast_pointer).va_rawsize - VARHDRSZ)
394
-
395
-
396
- /* ----------------------------------------------------------------
397
- * Section 2: Datum type + support macros
50
+ * Section 1: Datum type + support functions
398
51
  * ----------------------------------------------------------------
399
52
  */
400
53
 
@@ -404,7 +57,7 @@ typedef struct
404
57
  *
405
58
  * sizeof(Datum) == sizeof(void *) == 4 or 8
406
59
  *
407
- * The macros below and the analogous macros for other types should be used to
60
+ * The functions below and the analogous functions for other types should be used to
408
61
  * convert between a Datum and the appropriate C type.
409
62
  */
410
63
 
@@ -433,8 +86,11 @@ typedef struct NullableDatum
433
86
  *
434
87
  * Note: any nonzero value will be considered true.
435
88
  */
436
-
437
- #define DatumGetBool(X) ((bool) ((X) != 0))
89
+ static inline bool
90
+ DatumGetBool(Datum X)
91
+ {
92
+ return (X != 0);
93
+ }
438
94
 
439
95
  /*
440
96
  * BoolGetDatum
@@ -442,162 +98,231 @@ typedef struct NullableDatum
442
98
  *
443
99
  * Note: any nonzero value will be considered true.
444
100
  */
445
-
446
- #define BoolGetDatum(X) ((Datum) ((X) ? 1 : 0))
101
+ static inline Datum
102
+ BoolGetDatum(bool X)
103
+ {
104
+ return (Datum) (X ? 1 : 0);
105
+ }
447
106
 
448
107
  /*
449
108
  * DatumGetChar
450
109
  * Returns character value of a datum.
451
110
  */
452
-
453
- #define DatumGetChar(X) ((char) (X))
111
+ static inline char
112
+ DatumGetChar(Datum X)
113
+ {
114
+ return (char) X;
115
+ }
454
116
 
455
117
  /*
456
118
  * CharGetDatum
457
119
  * Returns datum representation for a character.
458
120
  */
459
-
460
- #define CharGetDatum(X) ((Datum) (X))
121
+ static inline Datum
122
+ CharGetDatum(char X)
123
+ {
124
+ return (Datum) X;
125
+ }
461
126
 
462
127
  /*
463
128
  * Int8GetDatum
464
129
  * Returns datum representation for an 8-bit integer.
465
130
  */
466
-
467
- #define Int8GetDatum(X) ((Datum) (X))
131
+ static inline Datum
132
+ Int8GetDatum(int8 X)
133
+ {
134
+ return (Datum) X;
135
+ }
468
136
 
469
137
  /*
470
138
  * DatumGetUInt8
471
139
  * Returns 8-bit unsigned integer value of a datum.
472
140
  */
473
-
474
- #define DatumGetUInt8(X) ((uint8) (X))
141
+ static inline uint8
142
+ DatumGetUInt8(Datum X)
143
+ {
144
+ return (uint8) X;
145
+ }
475
146
 
476
147
  /*
477
148
  * UInt8GetDatum
478
149
  * Returns datum representation for an 8-bit unsigned integer.
479
150
  */
480
-
481
- #define UInt8GetDatum(X) ((Datum) (X))
151
+ static inline Datum
152
+ UInt8GetDatum(uint8 X)
153
+ {
154
+ return (Datum) X;
155
+ }
482
156
 
483
157
  /*
484
158
  * DatumGetInt16
485
159
  * Returns 16-bit integer value of a datum.
486
160
  */
487
-
488
- #define DatumGetInt16(X) ((int16) (X))
161
+ static inline int16
162
+ DatumGetInt16(Datum X)
163
+ {
164
+ return (int16) X;
165
+ }
489
166
 
490
167
  /*
491
168
  * Int16GetDatum
492
169
  * Returns datum representation for a 16-bit integer.
493
170
  */
494
-
495
- #define Int16GetDatum(X) ((Datum) (X))
171
+ static inline Datum
172
+ Int16GetDatum(int16 X)
173
+ {
174
+ return (Datum) X;
175
+ }
496
176
 
497
177
  /*
498
178
  * DatumGetUInt16
499
179
  * Returns 16-bit unsigned integer value of a datum.
500
180
  */
501
-
502
- #define DatumGetUInt16(X) ((uint16) (X))
181
+ static inline uint16
182
+ DatumGetUInt16(Datum X)
183
+ {
184
+ return (uint16) X;
185
+ }
503
186
 
504
187
  /*
505
188
  * UInt16GetDatum
506
189
  * Returns datum representation for a 16-bit unsigned integer.
507
190
  */
508
-
509
- #define UInt16GetDatum(X) ((Datum) (X))
191
+ static inline Datum
192
+ UInt16GetDatum(uint16 X)
193
+ {
194
+ return (Datum) X;
195
+ }
510
196
 
511
197
  /*
512
198
  * DatumGetInt32
513
199
  * Returns 32-bit integer value of a datum.
514
200
  */
515
-
516
- #define DatumGetInt32(X) ((int32) (X))
201
+ static inline int32
202
+ DatumGetInt32(Datum X)
203
+ {
204
+ return (int32) X;
205
+ }
517
206
 
518
207
  /*
519
208
  * Int32GetDatum
520
209
  * Returns datum representation for a 32-bit integer.
521
210
  */
522
-
523
- #define Int32GetDatum(X) ((Datum) (X))
211
+ static inline Datum
212
+ Int32GetDatum(int32 X)
213
+ {
214
+ return (Datum) X;
215
+ }
524
216
 
525
217
  /*
526
218
  * DatumGetUInt32
527
219
  * Returns 32-bit unsigned integer value of a datum.
528
220
  */
529
-
530
- #define DatumGetUInt32(X) ((uint32) (X))
221
+ static inline uint32
222
+ DatumGetUInt32(Datum X)
223
+ {
224
+ return (uint32) X;
225
+ }
531
226
 
532
227
  /*
533
228
  * UInt32GetDatum
534
229
  * Returns datum representation for a 32-bit unsigned integer.
535
230
  */
536
-
537
- #define UInt32GetDatum(X) ((Datum) (X))
231
+ static inline Datum
232
+ UInt32GetDatum(uint32 X)
233
+ {
234
+ return (Datum) X;
235
+ }
538
236
 
539
237
  /*
540
238
  * DatumGetObjectId
541
239
  * Returns object identifier value of a datum.
542
240
  */
543
-
544
- #define DatumGetObjectId(X) ((Oid) (X))
241
+ static inline Oid
242
+ DatumGetObjectId(Datum X)
243
+ {
244
+ return (Oid) X;
245
+ }
545
246
 
546
247
  /*
547
248
  * ObjectIdGetDatum
548
249
  * Returns datum representation for an object identifier.
549
250
  */
550
-
551
- #define ObjectIdGetDatum(X) ((Datum) (X))
251
+ static inline Datum
252
+ ObjectIdGetDatum(Oid X)
253
+ {
254
+ return (Datum) X;
255
+ }
552
256
 
553
257
  /*
554
258
  * DatumGetTransactionId
555
259
  * Returns transaction identifier value of a datum.
556
260
  */
557
-
558
- #define DatumGetTransactionId(X) ((TransactionId) (X))
261
+ static inline TransactionId
262
+ DatumGetTransactionId(Datum X)
263
+ {
264
+ return (TransactionId) X;
265
+ }
559
266
 
560
267
  /*
561
268
  * TransactionIdGetDatum
562
269
  * Returns datum representation for a transaction identifier.
563
270
  */
564
-
565
- #define TransactionIdGetDatum(X) ((Datum) (X))
271
+ static inline Datum
272
+ TransactionIdGetDatum(TransactionId X)
273
+ {
274
+ return (Datum) X;
275
+ }
566
276
 
567
277
  /*
568
278
  * MultiXactIdGetDatum
569
279
  * Returns datum representation for a multixact identifier.
570
280
  */
571
-
572
- #define MultiXactIdGetDatum(X) ((Datum) (X))
281
+ static inline Datum
282
+ MultiXactIdGetDatum(MultiXactId X)
283
+ {
284
+ return (Datum) X;
285
+ }
573
286
 
574
287
  /*
575
288
  * DatumGetCommandId
576
289
  * Returns command identifier value of a datum.
577
290
  */
578
-
579
- #define DatumGetCommandId(X) ((CommandId) (X))
291
+ static inline CommandId
292
+ DatumGetCommandId(Datum X)
293
+ {
294
+ return (CommandId) X;
295
+ }
580
296
 
581
297
  /*
582
298
  * CommandIdGetDatum
583
299
  * Returns datum representation for a command identifier.
584
300
  */
585
-
586
- #define CommandIdGetDatum(X) ((Datum) (X))
301
+ static inline Datum
302
+ CommandIdGetDatum(CommandId X)
303
+ {
304
+ return (Datum) X;
305
+ }
587
306
 
588
307
  /*
589
308
  * DatumGetPointer
590
309
  * Returns pointer value of a datum.
591
310
  */
592
-
593
- #define DatumGetPointer(X) ((Pointer) (X))
311
+ static inline Pointer
312
+ DatumGetPointer(Datum X)
313
+ {
314
+ return (Pointer) X;
315
+ }
594
316
 
595
317
  /*
596
318
  * PointerGetDatum
597
319
  * Returns datum representation for a pointer.
598
320
  */
599
-
600
- #define PointerGetDatum(X) ((Datum) (X))
321
+ static inline Datum
322
+ PointerGetDatum(const void *X)
323
+ {
324
+ return (Datum) X;
325
+ }
601
326
 
602
327
  /*
603
328
  * DatumGetCString
@@ -606,8 +331,11 @@ typedef struct NullableDatum
606
331
  * Note: C string is not a full-fledged Postgres type at present,
607
332
  * but type input functions use this conversion for their inputs.
608
333
  */
609
-
610
- #define DatumGetCString(X) ((char *) DatumGetPointer(X))
334
+ static inline char *
335
+ DatumGetCString(Datum X)
336
+ {
337
+ return (char *) DatumGetPointer(X);
338
+ }
611
339
 
612
340
  /*
613
341
  * CStringGetDatum
@@ -618,15 +346,21 @@ typedef struct NullableDatum
618
346
  * Note: CString is pass-by-reference; caller must ensure the pointed-to
619
347
  * value has adequate lifetime.
620
348
  */
621
-
622
- #define CStringGetDatum(X) PointerGetDatum(X)
349
+ static inline Datum
350
+ CStringGetDatum(const char *X)
351
+ {
352
+ return PointerGetDatum(X);
353
+ }
623
354
 
624
355
  /*
625
356
  * DatumGetName
626
357
  * Returns name value of a datum.
627
358
  */
628
-
629
- #define DatumGetName(X) ((Name) DatumGetPointer(X))
359
+ static inline Name
360
+ DatumGetName(Datum X)
361
+ {
362
+ return (Name) DatumGetPointer(X);
363
+ }
630
364
 
631
365
  /*
632
366
  * NameGetDatum
@@ -635,21 +369,27 @@ typedef struct NullableDatum
635
369
  * Note: Name is pass-by-reference; caller must ensure the pointed-to
636
370
  * value has adequate lifetime.
637
371
  */
638
-
639
- #define NameGetDatum(X) CStringGetDatum(NameStr(*(X)))
372
+ static inline Datum
373
+ NameGetDatum(const NameData *X)
374
+ {
375
+ return CStringGetDatum(NameStr(*X));
376
+ }
640
377
 
641
378
  /*
642
379
  * DatumGetInt64
643
380
  * Returns 64-bit integer value of a datum.
644
381
  *
645
- * Note: this macro hides whether int64 is pass by value or by reference.
382
+ * Note: this function hides whether int64 is pass by value or by reference.
646
383
  */
647
-
384
+ static inline int64
385
+ DatumGetInt64(Datum X)
386
+ {
648
387
  #ifdef USE_FLOAT8_BYVAL
649
- #define DatumGetInt64(X) ((int64) (X))
388
+ return (int64) X;
650
389
  #else
651
- #define DatumGetInt64(X) (* ((int64 *) DatumGetPointer(X)))
390
+ return *((int64 *) DatumGetPointer(X));
652
391
  #endif
392
+ }
653
393
 
654
394
  /*
655
395
  * Int64GetDatum
@@ -658,25 +398,32 @@ typedef struct NullableDatum
658
398
  * Note: if int64 is pass by reference, this function returns a reference
659
399
  * to palloc'd space.
660
400
  */
661
-
662
401
  #ifdef USE_FLOAT8_BYVAL
663
- #define Int64GetDatum(X) ((Datum) (X))
402
+ static inline Datum
403
+ Int64GetDatum(int64 X)
404
+ {
405
+ return (Datum) X;
406
+ }
664
407
  #else
665
408
  extern Datum Int64GetDatum(int64 X);
666
409
  #endif
667
410
 
411
+
668
412
  /*
669
413
  * DatumGetUInt64
670
414
  * Returns 64-bit unsigned integer value of a datum.
671
415
  *
672
- * Note: this macro hides whether int64 is pass by value or by reference.
416
+ * Note: this function hides whether int64 is pass by value or by reference.
673
417
  */
674
-
418
+ static inline uint64
419
+ DatumGetUInt64(Datum X)
420
+ {
675
421
  #ifdef USE_FLOAT8_BYVAL
676
- #define DatumGetUInt64(X) ((uint64) (X))
422
+ return (uint64) X;
677
423
  #else
678
- #define DatumGetUInt64(X) (* ((uint64 *) DatumGetPointer(X)))
424
+ return *((uint64 *) DatumGetPointer(X));
679
425
  #endif
426
+ }
680
427
 
681
428
  /*
682
429
  * UInt64GetDatum
@@ -685,12 +432,15 @@ extern Datum Int64GetDatum(int64 X);
685
432
  * Note: if int64 is pass by reference, this function returns a reference
686
433
  * to palloc'd space.
687
434
  */
688
-
435
+ static inline Datum
436
+ UInt64GetDatum(uint64 X)
437
+ {
689
438
  #ifdef USE_FLOAT8_BYVAL
690
- #define UInt64GetDatum(X) ((Datum) (X))
439
+ return (Datum) X;
691
440
  #else
692
- #define UInt64GetDatum(X) Int64GetDatum((int64) (X))
441
+ return Int64GetDatum((int64) X);
693
442
  #endif
443
+ }
694
444
 
695
445
  /*
696
446
  * Float <-> Datum conversions
@@ -738,13 +488,12 @@ Float4GetDatum(float4 X)
738
488
  * DatumGetFloat8
739
489
  * Returns 8-byte floating point value of a datum.
740
490
  *
741
- * Note: this macro hides whether float8 is pass by value or by reference.
491
+ * Note: this function hides whether float8 is pass by value or by reference.
742
492
  */
743
-
744
- #ifdef USE_FLOAT8_BYVAL
745
493
  static inline float8
746
494
  DatumGetFloat8(Datum X)
747
495
  {
496
+ #ifdef USE_FLOAT8_BYVAL
748
497
  union
749
498
  {
750
499
  int64 value;
@@ -753,10 +502,10 @@ DatumGetFloat8(Datum X)
753
502
 
754
503
  myunion.value = DatumGetInt64(X);
755
504
  return myunion.retval;
756
- }
757
505
  #else
758
- #define DatumGetFloat8(X) (* ((float8 *) DatumGetPointer(X)))
506
+ return *((float8 *) DatumGetPointer(X));
759
507
  #endif
508
+ }
760
509
 
761
510
  /*
762
511
  * Float8GetDatum
@@ -765,7 +514,6 @@ DatumGetFloat8(Datum X)
765
514
  * Note: if float8 is pass by reference, this function returns a reference
766
515
  * to palloc'd space.
767
516
  */
768
-
769
517
  #ifdef USE_FLOAT8_BYVAL
770
518
  static inline Datum
771
519
  Float8GetDatum(float8 X)
@@ -793,16 +541,39 @@ extern Datum Float8GetDatum(float8 X);
793
541
  * sacrificing performance when they are. The argument must be a variable
794
542
  * that will exist and have the same value for as long as the Datum is needed.
795
543
  * In the pass-by-ref case, the address of the variable is taken to use as
796
- * the Datum. In the pass-by-val case, these will be the same as the non-Fast
797
- * macros.
544
+ * the Datum. In the pass-by-val case, these are the same as the non-Fast
545
+ * functions, except for asserting that the variable is of the correct type.
798
546
  */
799
547
 
800
548
  #ifdef USE_FLOAT8_BYVAL
801
- #define Int64GetDatumFast(X) Int64GetDatum(X)
802
- #define Float8GetDatumFast(X) Float8GetDatum(X)
549
+ #define Int64GetDatumFast(X) \
550
+ (AssertVariableIsOfTypeMacro(X, int64), Int64GetDatum(X))
551
+ #define Float8GetDatumFast(X) \
552
+ (AssertVariableIsOfTypeMacro(X, double), Float8GetDatum(X))
553
+ #else
554
+ #define Int64GetDatumFast(X) \
555
+ (AssertVariableIsOfTypeMacro(X, int64), PointerGetDatum(&(X)))
556
+ #define Float8GetDatumFast(X) \
557
+ (AssertVariableIsOfTypeMacro(X, double), PointerGetDatum(&(X)))
558
+ #endif
559
+
560
+
561
+ /* ----------------------------------------------------------------
562
+ * Section 2: miscellaneous
563
+ * ----------------------------------------------------------------
564
+ */
565
+
566
+ /*
567
+ * NON_EXEC_STATIC: It's sometimes useful to define a variable or function
568
+ * that is normally static but extern when using EXEC_BACKEND (see
569
+ * pg_config_manual.h). There would then typically be some code in
570
+ * postmaster.c that uses those extern symbols to transfer state between
571
+ * processes or do whatever other things it needs to do in EXEC_BACKEND mode.
572
+ */
573
+ #ifdef EXEC_BACKEND
574
+ #define NON_EXEC_STATIC
803
575
  #else
804
- #define Int64GetDatumFast(X) PointerGetDatum(&(X))
805
- #define Float8GetDatumFast(X) PointerGetDatum(&(X))
576
+ #define NON_EXEC_STATIC static
806
577
  #endif
807
578
 
808
579
  #endif /* POSTGRES_H */