pg_query 4.2.1 → 6.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.
Files changed (901) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +61 -0
  3. data/README.md +7 -9
  4. data/Rakefile +5 -6
  5. data/ext/pg_query/ext_symbols_freebsd.sym +1 -0
  6. data/ext/pg_query/ext_symbols_freebsd_with_ruby_abi_version.sym +2 -0
  7. data/ext/pg_query/ext_symbols_openbsd.sym +1 -0
  8. data/ext/pg_query/ext_symbols_openbsd_with_ruby_abi_version.sym +2 -0
  9. data/ext/pg_query/ext_symbols_with_ruby_abi_version.sym +2 -0
  10. data/ext/pg_query/extconf.rb +33 -9
  11. data/ext/pg_query/include/pg_query.h +28 -3
  12. data/ext/pg_query/include/pg_query_enum_defs.c +599 -167
  13. data/ext/pg_query/include/pg_query_fingerprint_conds.c +640 -520
  14. data/ext/pg_query/include/pg_query_fingerprint_defs.c +6400 -4633
  15. data/ext/pg_query/include/pg_query_outfuncs_conds.c +433 -343
  16. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1472 -1152
  17. data/ext/pg_query/include/pg_query_readfuncs_conds.c +154 -124
  18. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1886 -1506
  19. data/ext/pg_query/include/postgres/access/amapi.h +303 -0
  20. data/ext/pg_query/include/postgres/access/attmap.h +54 -0
  21. data/ext/pg_query/include/postgres/access/attnum.h +64 -0
  22. data/ext/pg_query/include/postgres/access/brin_internal.h +116 -0
  23. data/ext/pg_query/include/postgres/access/brin_tuple.h +112 -0
  24. data/ext/pg_query/include/postgres/access/clog.h +62 -0
  25. data/ext/pg_query/include/postgres/access/commit_ts.h +73 -0
  26. data/ext/pg_query/include/postgres/access/detoast.h +82 -0
  27. data/ext/pg_query/include/postgres/access/genam.h +246 -0
  28. data/ext/pg_query/include/postgres/access/gin.h +91 -0
  29. data/ext/pg_query/include/postgres/access/htup.h +89 -0
  30. data/ext/pg_query/include/postgres/access/htup_details.h +811 -0
  31. data/ext/pg_query/include/postgres/access/itup.h +170 -0
  32. data/ext/pg_query/include/postgres/access/parallel.h +81 -0
  33. data/ext/pg_query/include/postgres/access/printtup.h +35 -0
  34. data/ext/pg_query/include/postgres/access/relation.h +28 -0
  35. data/ext/pg_query/include/postgres/access/relscan.h +191 -0
  36. data/ext/pg_query/include/postgres/access/rmgrlist.h +49 -0
  37. data/ext/pg_query/include/postgres/access/sdir.h +67 -0
  38. data/ext/pg_query/include/postgres/access/skey.h +151 -0
  39. data/ext/pg_query/include/postgres/access/slru.h +218 -0
  40. data/ext/pg_query/include/postgres/access/stratnum.h +85 -0
  41. data/ext/pg_query/include/postgres/access/sysattr.h +29 -0
  42. data/ext/pg_query/include/postgres/access/table.h +28 -0
  43. data/ext/pg_query/include/postgres/access/tableam.h +2110 -0
  44. data/ext/pg_query/include/postgres/access/tidstore.h +50 -0
  45. data/ext/pg_query/include/postgres/access/toast_compression.h +73 -0
  46. data/ext/pg_query/include/postgres/access/transam.h +418 -0
  47. data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
  48. data/ext/pg_query/include/postgres/access/tupconvert.h +54 -0
  49. data/ext/pg_query/include/postgres/access/tupdesc.h +154 -0
  50. data/ext/pg_query/include/postgres/access/tupmacs.h +207 -0
  51. data/ext/pg_query/include/postgres/access/twophase.h +65 -0
  52. data/ext/pg_query/include/postgres/access/xact.h +530 -0
  53. data/ext/pg_query/include/postgres/access/xlog.h +310 -0
  54. data/ext/pg_query/include/postgres/access/xlog_internal.h +405 -0
  55. data/ext/pg_query/include/postgres/access/xlogbackup.h +43 -0
  56. data/ext/pg_query/include/postgres/access/xlogdefs.h +82 -0
  57. data/ext/pg_query/include/postgres/access/xlogprefetcher.h +55 -0
  58. data/ext/pg_query/include/postgres/access/xlogreader.h +444 -0
  59. data/ext/pg_query/include/postgres/access/xlogrecord.h +248 -0
  60. data/ext/pg_query/include/postgres/access/xlogrecovery.h +158 -0
  61. data/ext/pg_query/include/postgres/archive/archive_module.h +67 -0
  62. data/ext/pg_query/include/postgres/c.h +1374 -0
  63. data/ext/pg_query/include/postgres/catalog/catalog.h +47 -0
  64. data/ext/pg_query/include/postgres/catalog/catversion.h +62 -0
  65. data/ext/pg_query/include/postgres/catalog/dependency.h +228 -0
  66. data/ext/pg_query/include/postgres/catalog/genbki.h +149 -0
  67. data/ext/pg_query/include/postgres/catalog/index.h +218 -0
  68. data/ext/pg_query/include/postgres/catalog/indexing.h +54 -0
  69. data/ext/pg_query/include/postgres/catalog/namespace.h +189 -0
  70. data/ext/pg_query/include/postgres/catalog/objectaccess.h +267 -0
  71. data/ext/pg_query/include/postgres/catalog/objectaddress.h +93 -0
  72. data/ext/pg_query/include/postgres/catalog/pg_aggregate.h +182 -0
  73. data/ext/pg_query/include/postgres/catalog/pg_aggregate_d.h +78 -0
  74. data/ext/pg_query/include/postgres/catalog/pg_am.h +66 -0
  75. data/ext/pg_query/include/postgres/catalog/pg_am_d.h +47 -0
  76. data/ext/pg_query/include/postgres/catalog/pg_attribute.h +240 -0
  77. data/ext/pg_query/include/postgres/catalog/pg_attribute_d.h +62 -0
  78. data/ext/pg_query/include/postgres/catalog/pg_authid.h +66 -0
  79. data/ext/pg_query/include/postgres/catalog/pg_authid_d.h +60 -0
  80. data/ext/pg_query/include/postgres/catalog/pg_class.h +235 -0
  81. data/ext/pg_query/include/postgres/catalog/pg_class_d.h +134 -0
  82. data/ext/pg_query/include/postgres/catalog/pg_collation.h +106 -0
  83. data/ext/pg_query/include/postgres/catalog/pg_collation_d.h +66 -0
  84. data/ext/pg_query/include/postgres/catalog/pg_constraint.h +278 -0
  85. data/ext/pg_query/include/postgres/catalog/pg_constraint_d.h +74 -0
  86. data/ext/pg_query/include/postgres/catalog/pg_control.h +260 -0
  87. data/ext/pg_query/include/postgres/catalog/pg_conversion.h +79 -0
  88. data/ext/pg_query/include/postgres/catalog/pg_conversion_d.h +38 -0
  89. data/ext/pg_query/include/postgres/catalog/pg_database.h +129 -0
  90. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +53 -0
  91. data/ext/pg_query/include/postgres/catalog/pg_depend.h +77 -0
  92. data/ext/pg_query/include/postgres/catalog/pg_depend_d.h +36 -0
  93. data/ext/pg_query/include/postgres/catalog/pg_event_trigger.h +60 -0
  94. data/ext/pg_query/include/postgres/catalog/pg_event_trigger_d.h +36 -0
  95. data/ext/pg_query/include/postgres/catalog/pg_index.h +92 -0
  96. data/ext/pg_query/include/postgres/catalog/pg_index_d.h +59 -0
  97. data/ext/pg_query/include/postgres/catalog/pg_language.h +75 -0
  98. data/ext/pg_query/include/postgres/catalog/pg_language_d.h +41 -0
  99. data/ext/pg_query/include/postgres/catalog/pg_namespace.h +67 -0
  100. data/ext/pg_query/include/postgres/catalog/pg_namespace_d.h +36 -0
  101. data/ext/pg_query/include/postgres/catalog/pg_opclass.h +91 -0
  102. data/ext/pg_query/include/postgres/catalog/pg_opclass_d.h +51 -0
  103. data/ext/pg_query/include/postgres/catalog/pg_operator.h +124 -0
  104. data/ext/pg_query/include/postgres/catalog/pg_operator_d.h +142 -0
  105. data/ext/pg_query/include/postgres/catalog/pg_opfamily.h +67 -0
  106. data/ext/pg_query/include/postgres/catalog/pg_opfamily_d.h +51 -0
  107. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table.h +76 -0
  108. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table_d.h +36 -0
  109. data/ext/pg_query/include/postgres/catalog/pg_proc.h +223 -0
  110. data/ext/pg_query/include/postgres/catalog/pg_proc_d.h +101 -0
  111. data/ext/pg_query/include/postgres/catalog/pg_publication.h +161 -0
  112. data/ext/pg_query/include/postgres/catalog/pg_publication_d.h +38 -0
  113. data/ext/pg_query/include/postgres/catalog/pg_replication_origin.h +65 -0
  114. data/ext/pg_query/include/postgres/catalog/pg_replication_origin_d.h +33 -0
  115. data/ext/pg_query/include/postgres/catalog/pg_statistic.h +288 -0
  116. data/ext/pg_query/include/postgres/catalog/pg_statistic_d.h +199 -0
  117. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext.h +91 -0
  118. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext_d.h +45 -0
  119. data/ext/pg_query/include/postgres/catalog/pg_transform.h +51 -0
  120. data/ext/pg_query/include/postgres/catalog/pg_transform_d.h +34 -0
  121. data/ext/pg_query/include/postgres/catalog/pg_trigger.h +153 -0
  122. data/ext/pg_query/include/postgres/catalog/pg_trigger_d.h +109 -0
  123. data/ext/pg_query/include/postgres/catalog/pg_ts_config.h +56 -0
  124. data/ext/pg_query/include/postgres/catalog/pg_ts_config_d.h +34 -0
  125. data/ext/pg_query/include/postgres/catalog/pg_ts_dict.h +62 -0
  126. data/ext/pg_query/include/postgres/catalog/pg_ts_dict_d.h +35 -0
  127. data/ext/pg_query/include/postgres/catalog/pg_ts_parser.h +63 -0
  128. data/ext/pg_query/include/postgres/catalog/pg_ts_parser_d.h +37 -0
  129. data/ext/pg_query/include/postgres/catalog/pg_ts_template.h +54 -0
  130. data/ext/pg_query/include/postgres/catalog/pg_ts_template_d.h +34 -0
  131. data/ext/pg_query/include/postgres/catalog/pg_type.h +407 -0
  132. data/ext/pg_query/include/postgres/catalog/pg_type_d.h +324 -0
  133. data/ext/pg_query/include/postgres/catalog/storage.h +50 -0
  134. data/ext/pg_query/include/postgres/catalog/syscache_ids.h +104 -0
  135. data/ext/pg_query/include/postgres/commands/async.h +49 -0
  136. data/ext/pg_query/include/postgres/commands/dbcommands.h +37 -0
  137. data/ext/pg_query/include/postgres/commands/defrem.h +161 -0
  138. data/ext/pg_query/include/postgres/commands/event_trigger.h +97 -0
  139. data/ext/pg_query/include/postgres/commands/explain.h +145 -0
  140. data/ext/pg_query/include/postgres/commands/prepare.h +61 -0
  141. data/ext/pg_query/include/postgres/commands/tablespace.h +69 -0
  142. data/ext/pg_query/include/postgres/commands/trigger.h +288 -0
  143. data/ext/pg_query/include/postgres/commands/user.h +43 -0
  144. data/ext/pg_query/include/postgres/commands/vacuum.h +388 -0
  145. data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
  146. data/ext/pg_query/include/postgres/common/file_perm.h +56 -0
  147. data/ext/pg_query/include/postgres/common/file_utils.h +65 -0
  148. data/ext/pg_query/include/postgres/common/hashfn.h +119 -0
  149. data/ext/pg_query/include/postgres/common/hashfn_unstable.h +407 -0
  150. data/ext/pg_query/include/postgres/common/int.h +512 -0
  151. data/ext/pg_query/include/postgres/common/keywords.h +29 -0
  152. data/ext/pg_query/include/postgres/common/kwlookup.h +44 -0
  153. data/ext/pg_query/include/postgres/common/pg_prng.h +62 -0
  154. data/ext/pg_query/include/postgres/common/relpath.h +97 -0
  155. data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
  156. data/ext/pg_query/include/postgres/common/sha2.h +32 -0
  157. data/ext/pg_query/include/postgres/common/string.h +44 -0
  158. data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +124 -0
  159. data/ext/pg_query/include/postgres/common/unicode_nonspacing_table.h +326 -0
  160. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5261 -0
  161. data/ext/pg_query/include/postgres/copyfuncs.switch.c +989 -0
  162. data/ext/pg_query/include/postgres/datatype/timestamp.h +269 -0
  163. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3310 -0
  164. data/ext/pg_query/include/postgres/equalfuncs.switch.c +836 -0
  165. data/ext/pg_query/include/postgres/executor/execdesc.h +70 -0
  166. data/ext/pg_query/include/postgres/executor/executor.h +681 -0
  167. data/ext/pg_query/include/postgres/executor/functions.h +56 -0
  168. data/ext/pg_query/include/postgres/executor/instrument.h +120 -0
  169. data/ext/pg_query/include/postgres/executor/spi.h +207 -0
  170. data/ext/pg_query/include/postgres/executor/tablefunc.h +67 -0
  171. data/ext/pg_query/include/postgres/executor/tuptable.h +523 -0
  172. data/ext/pg_query/include/postgres/fmgr.h +800 -0
  173. data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
  174. data/ext/pg_query/include/postgres/funcapi.h +360 -0
  175. data/ext/pg_query/include/postgres/gram.h +1168 -0
  176. data/ext/pg_query/include/postgres/gramparse.h +75 -0
  177. data/ext/pg_query/include/postgres/jit/jit.h +106 -0
  178. data/ext/pg_query/include/postgres/kwlist_d.h +1164 -0
  179. data/ext/pg_query/include/postgres/lib/dshash.h +130 -0
  180. data/ext/pg_query/include/postgres/lib/ilist.h +1159 -0
  181. data/ext/pg_query/include/postgres/lib/pairingheap.h +102 -0
  182. data/ext/pg_query/include/postgres/lib/simplehash.h +1206 -0
  183. data/ext/pg_query/include/postgres/lib/sort_template.h +445 -0
  184. data/ext/pg_query/include/postgres/lib/stringinfo.h +243 -0
  185. data/ext/pg_query/include/postgres/libpq/auth.h +37 -0
  186. data/ext/pg_query/include/postgres/libpq/crypt.h +47 -0
  187. data/ext/pg_query/include/postgres/libpq/hba.h +186 -0
  188. data/ext/pg_query/include/postgres/libpq/libpq-be.h +361 -0
  189. data/ext/pg_query/include/postgres/libpq/libpq.h +143 -0
  190. data/ext/pg_query/include/postgres/libpq/pqcomm.h +169 -0
  191. data/ext/pg_query/include/postgres/libpq/pqformat.h +209 -0
  192. data/ext/pg_query/include/postgres/libpq/pqsignal.h +54 -0
  193. data/ext/pg_query/include/postgres/libpq/protocol.h +89 -0
  194. data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
  195. data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
  196. data/ext/pg_query/include/postgres/mb/pg_wchar.h +793 -0
  197. data/ext/pg_query/include/postgres/mb/stringinfo_mb.h +24 -0
  198. data/ext/pg_query/include/postgres/miscadmin.h +527 -0
  199. data/ext/pg_query/include/postgres/nodes/bitmapset.h +140 -0
  200. data/ext/pg_query/include/postgres/nodes/execnodes.h +2855 -0
  201. data/ext/pg_query/include/postgres/nodes/extensible.h +164 -0
  202. data/ext/pg_query/include/postgres/nodes/lockoptions.h +61 -0
  203. data/ext/pg_query/include/postgres/nodes/makefuncs.h +127 -0
  204. data/ext/pg_query/include/postgres/nodes/memnodes.h +152 -0
  205. data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
  206. data/ext/pg_query/include/postgres/nodes/nodeFuncs.h +222 -0
  207. data/ext/pg_query/include/postgres/nodes/nodes.h +435 -0
  208. data/ext/pg_query/include/postgres/nodes/nodetags.h +491 -0
  209. data/ext/pg_query/include/postgres/nodes/params.h +170 -0
  210. data/ext/pg_query/include/postgres/nodes/parsenodes.h +4233 -0
  211. data/ext/pg_query/include/postgres/nodes/pathnodes.h +3438 -0
  212. data/ext/pg_query/include/postgres/nodes/pg_list.h +686 -0
  213. data/ext/pg_query/include/postgres/nodes/plannodes.h +1593 -0
  214. data/ext/pg_query/include/postgres/nodes/primnodes.h +2339 -0
  215. data/ext/pg_query/include/postgres/nodes/print.h +34 -0
  216. data/ext/pg_query/include/postgres/nodes/queryjumble.h +86 -0
  217. data/ext/pg_query/include/postgres/nodes/replnodes.h +132 -0
  218. data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
  219. data/ext/pg_query/include/postgres/nodes/tidbitmap.h +75 -0
  220. data/ext/pg_query/include/postgres/nodes/value.h +90 -0
  221. data/ext/pg_query/include/postgres/optimizer/cost.h +216 -0
  222. data/ext/pg_query/include/postgres/optimizer/geqo.h +90 -0
  223. data/ext/pg_query/include/postgres/optimizer/geqo_gene.h +45 -0
  224. data/ext/pg_query/include/postgres/optimizer/optimizer.h +205 -0
  225. data/ext/pg_query/include/postgres/optimizer/paths.h +271 -0
  226. data/ext/pg_query/include/postgres/optimizer/planmain.h +123 -0
  227. data/ext/pg_query/include/postgres/parser/analyze.h +66 -0
  228. data/ext/pg_query/include/postgres/parser/kwlist.h +518 -0
  229. data/ext/pg_query/include/postgres/parser/parse_agg.h +65 -0
  230. data/ext/pg_query/include/postgres/parser/parse_coerce.h +105 -0
  231. data/ext/pg_query/include/postgres/parser/parse_expr.h +25 -0
  232. data/ext/pg_query/include/postgres/parser/parse_func.h +74 -0
  233. data/ext/pg_query/include/postgres/parser/parse_node.h +358 -0
  234. data/ext/pg_query/include/postgres/parser/parse_oper.h +68 -0
  235. data/ext/pg_query/include/postgres/parser/parse_relation.h +129 -0
  236. data/ext/pg_query/include/postgres/parser/parse_type.h +61 -0
  237. data/ext/pg_query/include/postgres/parser/parser.h +68 -0
  238. data/ext/pg_query/include/postgres/parser/parsetree.h +61 -0
  239. data/ext/pg_query/include/postgres/parser/scanner.h +152 -0
  240. data/ext/pg_query/include/postgres/parser/scansup.h +27 -0
  241. data/ext/pg_query/include/postgres/partitioning/partdefs.h +26 -0
  242. data/ext/pg_query/include/postgres/pg_config.h +985 -0
  243. data/ext/pg_query/include/postgres/pg_config_manual.h +385 -0
  244. data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
  245. data/ext/pg_query/include/postgres/pg_getopt.h +56 -0
  246. data/ext/pg_query/include/postgres/pg_trace.h +17 -0
  247. data/ext/pg_query/include/postgres/pgstat.h +780 -0
  248. data/ext/pg_query/include/postgres/pgtime.h +94 -0
  249. data/ext/pg_query/include/postgres/pl_gram.h +385 -0
  250. data/ext/pg_query/include/postgres/pl_reserved_kwlist.h +52 -0
  251. data/ext/pg_query/include/postgres/pl_reserved_kwlist_d.h +114 -0
  252. data/ext/pg_query/include/postgres/pl_unreserved_kwlist.h +112 -0
  253. data/ext/pg_query/include/postgres/pl_unreserved_kwlist_d.h +246 -0
  254. data/ext/pg_query/include/postgres/plerrcodes.h +998 -0
  255. data/ext/pg_query/include/postgres/plpgsql.h +1342 -0
  256. data/ext/pg_query/include/postgres/port/atomics/arch-arm.h +32 -0
  257. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
  258. data/ext/pg_query/include/postgres/port/atomics/arch-ppc.h +256 -0
  259. data/ext/pg_query/include/postgres/port/atomics/arch-x86.h +254 -0
  260. data/ext/pg_query/include/postgres/port/atomics/fallback.h +170 -0
  261. data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +323 -0
  262. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +119 -0
  263. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +121 -0
  264. data/ext/pg_query/include/postgres/port/atomics/generic.h +437 -0
  265. data/ext/pg_query/include/postgres/port/atomics.h +606 -0
  266. data/ext/pg_query/include/postgres/port/pg_bitutils.h +421 -0
  267. data/ext/pg_query/include/postgres/port/pg_bswap.h +161 -0
  268. data/ext/pg_query/include/postgres/port/pg_crc32c.h +110 -0
  269. data/ext/pg_query/include/postgres/port/pg_iovec.h +117 -0
  270. data/ext/pg_query/include/postgres/port/simd.h +422 -0
  271. data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
  272. data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
  273. data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
  274. data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
  275. data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
  276. data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
  277. data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
  278. data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
  279. data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
  280. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +34 -0
  281. data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
  282. data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
  283. data/ext/pg_query/include/postgres/port/win32.h +59 -0
  284. data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
  285. data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
  286. data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
  287. data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
  288. data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
  289. data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
  290. data/ext/pg_query/include/postgres/port/win32_port.h +582 -0
  291. data/ext/pg_query/include/postgres/port.h +555 -0
  292. data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
  293. data/ext/pg_query/include/postgres/postgres.h +579 -0
  294. data/ext/pg_query/include/postgres/postgres_ext.h +73 -0
  295. data/ext/pg_query/include/postgres/postmaster/autovacuum.h +69 -0
  296. data/ext/pg_query/include/postgres/postmaster/bgworker.h +164 -0
  297. data/ext/pg_query/include/postgres/postmaster/bgworker_internals.h +60 -0
  298. data/ext/pg_query/include/postgres/postmaster/bgwriter.h +45 -0
  299. data/ext/pg_query/include/postgres/postmaster/interrupt.h +32 -0
  300. data/ext/pg_query/include/postgres/postmaster/pgarch.h +36 -0
  301. data/ext/pg_query/include/postgres/postmaster/postmaster.h +101 -0
  302. data/ext/pg_query/include/postgres/postmaster/startup.h +41 -0
  303. data/ext/pg_query/include/postgres/postmaster/syslogger.h +101 -0
  304. data/ext/pg_query/include/postgres/postmaster/walsummarizer.h +35 -0
  305. data/ext/pg_query/include/postgres/postmaster/walwriter.h +23 -0
  306. data/ext/pg_query/include/postgres/regex/regex.h +272 -0
  307. data/ext/pg_query/include/postgres/replication/logicallauncher.h +34 -0
  308. data/ext/pg_query/include/postgres/replication/logicalproto.h +274 -0
  309. data/ext/pg_query/include/postgres/replication/logicalworker.h +33 -0
  310. data/ext/pg_query/include/postgres/replication/origin.h +73 -0
  311. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +734 -0
  312. data/ext/pg_query/include/postgres/replication/slot.h +289 -0
  313. data/ext/pg_query/include/postgres/replication/slotsync.h +38 -0
  314. data/ext/pg_query/include/postgres/replication/syncrep.h +109 -0
  315. data/ext/pg_query/include/postgres/replication/walreceiver.h +504 -0
  316. data/ext/pg_query/include/postgres/replication/walsender.h +76 -0
  317. data/ext/pg_query/include/postgres/rewrite/prs2lock.h +46 -0
  318. data/ext/pg_query/include/postgres/rewrite/rewriteHandler.h +41 -0
  319. data/ext/pg_query/include/postgres/rewrite/rewriteManip.h +96 -0
  320. data/ext/pg_query/include/postgres/rewrite/rewriteSupport.h +26 -0
  321. data/ext/pg_query/include/postgres/storage/block.h +108 -0
  322. data/ext/pg_query/include/postgres/storage/buf.h +46 -0
  323. data/ext/pg_query/include/postgres/storage/bufmgr.h +411 -0
  324. data/ext/pg_query/include/postgres/storage/bufpage.h +510 -0
  325. data/ext/pg_query/include/postgres/storage/condition_variable.h +73 -0
  326. data/ext/pg_query/include/postgres/storage/dsm.h +61 -0
  327. data/ext/pg_query/include/postgres/storage/dsm_impl.h +79 -0
  328. data/ext/pg_query/include/postgres/storage/fd.h +219 -0
  329. data/ext/pg_query/include/postgres/storage/fileset.h +40 -0
  330. data/ext/pg_query/include/postgres/storage/ipc.h +87 -0
  331. data/ext/pg_query/include/postgres/storage/item.h +19 -0
  332. data/ext/pg_query/include/postgres/storage/itemid.h +184 -0
  333. data/ext/pg_query/include/postgres/storage/itemptr.h +245 -0
  334. data/ext/pg_query/include/postgres/storage/large_object.h +100 -0
  335. data/ext/pg_query/include/postgres/storage/latch.h +196 -0
  336. data/ext/pg_query/include/postgres/storage/lmgr.h +126 -0
  337. data/ext/pg_query/include/postgres/storage/lock.h +624 -0
  338. data/ext/pg_query/include/postgres/storage/lockdefs.h +61 -0
  339. data/ext/pg_query/include/postgres/storage/lwlock.h +228 -0
  340. data/ext/pg_query/include/postgres/storage/lwlocknames.h +47 -0
  341. data/ext/pg_query/include/postgres/storage/off.h +57 -0
  342. data/ext/pg_query/include/postgres/storage/pg_sema.h +61 -0
  343. data/ext/pg_query/include/postgres/storage/pg_shmem.h +93 -0
  344. data/ext/pg_query/include/postgres/storage/pmsignal.h +105 -0
  345. data/ext/pg_query/include/postgres/storage/predicate.h +83 -0
  346. data/ext/pg_query/include/postgres/storage/proc.h +488 -0
  347. data/ext/pg_query/include/postgres/storage/procarray.h +103 -0
  348. data/ext/pg_query/include/postgres/storage/proclist_types.h +53 -0
  349. data/ext/pg_query/include/postgres/storage/procnumber.h +43 -0
  350. data/ext/pg_query/include/postgres/storage/procsignal.h +75 -0
  351. data/ext/pg_query/include/postgres/storage/read_stream.h +65 -0
  352. data/ext/pg_query/include/postgres/storage/relfilelocator.h +100 -0
  353. data/ext/pg_query/include/postgres/storage/s_lock.h +847 -0
  354. data/ext/pg_query/include/postgres/storage/sharedfileset.h +37 -0
  355. data/ext/pg_query/include/postgres/storage/shm_mq.h +86 -0
  356. data/ext/pg_query/include/postgres/storage/shm_toc.h +58 -0
  357. data/ext/pg_query/include/postgres/storage/shmem.h +59 -0
  358. data/ext/pg_query/include/postgres/storage/sinval.h +153 -0
  359. data/ext/pg_query/include/postgres/storage/smgr.h +130 -0
  360. data/ext/pg_query/include/postgres/storage/spin.h +77 -0
  361. data/ext/pg_query/include/postgres/storage/standby.h +109 -0
  362. data/ext/pg_query/include/postgres/storage/standbydefs.h +74 -0
  363. data/ext/pg_query/include/postgres/storage/sync.h +66 -0
  364. data/ext/pg_query/include/postgres/tcop/cmdtag.h +62 -0
  365. data/ext/pg_query/include/postgres/tcop/cmdtaglist.h +219 -0
  366. data/ext/pg_query/include/postgres/tcop/deparse_utility.h +108 -0
  367. data/ext/pg_query/include/postgres/tcop/dest.h +148 -0
  368. data/ext/pg_query/include/postgres/tcop/fastpath.h +20 -0
  369. data/ext/pg_query/include/postgres/tcop/pquery.h +51 -0
  370. data/ext/pg_query/include/postgres/tcop/tcopprot.h +98 -0
  371. data/ext/pg_query/include/postgres/tcop/utility.h +112 -0
  372. data/ext/pg_query/include/postgres/tsearch/ts_cache.h +96 -0
  373. data/ext/pg_query/include/postgres/utils/acl.h +290 -0
  374. data/ext/pg_query/include/postgres/utils/aclchk_internal.h +45 -0
  375. data/ext/pg_query/include/postgres/utils/array.h +481 -0
  376. data/ext/pg_query/include/postgres/utils/ascii.h +84 -0
  377. data/ext/pg_query/include/postgres/utils/backend_progress.h +46 -0
  378. data/ext/pg_query/include/postgres/utils/backend_status.h +340 -0
  379. data/ext/pg_query/include/postgres/utils/builtins.h +139 -0
  380. data/ext/pg_query/include/postgres/utils/bytea.h +28 -0
  381. data/ext/pg_query/include/postgres/utils/catcache.h +231 -0
  382. data/ext/pg_query/include/postgres/utils/date.h +118 -0
  383. data/ext/pg_query/include/postgres/utils/datetime.h +367 -0
  384. data/ext/pg_query/include/postgres/utils/datum.h +76 -0
  385. data/ext/pg_query/include/postgres/utils/dsa.h +166 -0
  386. data/ext/pg_query/include/postgres/utils/elog.h +540 -0
  387. data/ext/pg_query/include/postgres/utils/errcodes.h +352 -0
  388. data/ext/pg_query/include/postgres/utils/expandeddatum.h +170 -0
  389. data/ext/pg_query/include/postgres/utils/expandedrecord.h +241 -0
  390. data/ext/pg_query/include/postgres/utils/float.h +357 -0
  391. data/ext/pg_query/include/postgres/utils/fmgroids.h +3347 -0
  392. data/ext/pg_query/include/postgres/utils/fmgrprotos.h +2904 -0
  393. data/ext/pg_query/include/postgres/utils/fmgrtab.h +49 -0
  394. data/ext/pg_query/include/postgres/utils/guc.h +456 -0
  395. data/ext/pg_query/include/postgres/utils/guc_hooks.h +184 -0
  396. data/ext/pg_query/include/postgres/utils/guc_tables.h +323 -0
  397. data/ext/pg_query/include/postgres/utils/hsearch.h +153 -0
  398. data/ext/pg_query/include/postgres/utils/injection_point.h +44 -0
  399. data/ext/pg_query/include/postgres/utils/inval.h +68 -0
  400. data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
  401. data/ext/pg_query/include/postgres/utils/lsyscache.h +215 -0
  402. data/ext/pg_query/include/postgres/utils/memdebug.h +82 -0
  403. data/ext/pg_query/include/postgres/utils/memutils.h +193 -0
  404. data/ext/pg_query/include/postgres/utils/memutils_internal.h +176 -0
  405. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +253 -0
  406. data/ext/pg_query/include/postgres/utils/numeric.h +110 -0
  407. data/ext/pg_query/include/postgres/utils/palloc.h +151 -0
  408. data/ext/pg_query/include/postgres/utils/partcache.h +103 -0
  409. data/ext/pg_query/include/postgres/utils/pg_locale.h +136 -0
  410. data/ext/pg_query/include/postgres/utils/pgstat_internal.h +827 -0
  411. data/ext/pg_query/include/postgres/utils/plancache.h +238 -0
  412. data/ext/pg_query/include/postgres/utils/portal.h +252 -0
  413. data/ext/pg_query/include/postgres/utils/probes.h +114 -0
  414. data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
  415. data/ext/pg_query/include/postgres/utils/queryenvironment.h +74 -0
  416. data/ext/pg_query/include/postgres/utils/regproc.h +39 -0
  417. data/ext/pg_query/include/postgres/utils/rel.h +711 -0
  418. data/ext/pg_query/include/postgres/utils/relcache.h +155 -0
  419. data/ext/pg_query/include/postgres/utils/reltrigger.h +81 -0
  420. data/ext/pg_query/include/postgres/utils/resowner.h +167 -0
  421. data/ext/pg_query/include/postgres/utils/ruleutils.h +52 -0
  422. data/ext/pg_query/include/postgres/utils/sharedtuplestore.h +61 -0
  423. data/ext/pg_query/include/postgres/utils/snapmgr.h +130 -0
  424. data/ext/pg_query/include/postgres/utils/snapshot.h +219 -0
  425. data/ext/pg_query/include/postgres/utils/sortsupport.h +391 -0
  426. data/ext/pg_query/include/postgres/utils/syscache.h +136 -0
  427. data/ext/pg_query/include/postgres/utils/timeout.h +96 -0
  428. data/ext/pg_query/include/postgres/utils/timestamp.h +147 -0
  429. data/ext/pg_query/include/postgres/utils/tuplesort.h +472 -0
  430. data/ext/pg_query/include/postgres/utils/tuplestore.h +88 -0
  431. data/ext/pg_query/include/postgres/utils/typcache.h +210 -0
  432. data/ext/pg_query/include/postgres/utils/varlena.h +53 -0
  433. data/ext/pg_query/include/postgres/utils/wait_event.h +108 -0
  434. data/ext/pg_query/include/postgres/utils/wait_event_types.h +218 -0
  435. data/ext/pg_query/include/postgres/utils/xml.h +94 -0
  436. data/ext/pg_query/include/postgres/varatt.h +358 -0
  437. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +7723 -6368
  438. data/ext/pg_query/include/protobuf/pg_query.pb.h +120022 -87031
  439. data/ext/pg_query/pg_query.c +10 -1
  440. data/ext/pg_query/pg_query.pb-c.c +22595 -17738
  441. data/ext/pg_query/pg_query_deparse.c +1 -10635
  442. data/ext/pg_query/pg_query_fingerprint.c +12 -8
  443. data/ext/pg_query/pg_query_fingerprint.h +1 -1
  444. data/ext/pg_query/pg_query_internal.h +1 -1
  445. data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
  446. data/ext/pg_query/pg_query_normalize.c +43 -2
  447. data/ext/pg_query/pg_query_outfuncs_json.c +9 -1
  448. data/ext/pg_query/pg_query_outfuncs_protobuf.c +3 -2
  449. data/ext/pg_query/pg_query_parse.c +47 -5
  450. data/ext/pg_query/pg_query_parse_plpgsql.c +19 -18
  451. data/ext/pg_query/pg_query_readfuncs_protobuf.c +3 -2
  452. data/ext/pg_query/pg_query_ruby.c +5 -0
  453. data/ext/pg_query/pg_query_scan.c +2 -2
  454. data/ext/pg_query/pg_query_split.c +3 -3
  455. data/ext/pg_query/postgres_deparse.c +11496 -0
  456. data/ext/pg_query/postgres_deparse.h +9 -0
  457. data/ext/pg_query/src_backend_catalog_namespace.c +243 -63
  458. data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -3
  459. data/ext/pg_query/src_backend_commands_define.c +2 -3
  460. data/ext/pg_query/src_backend_nodes_bitmapset.c +140 -156
  461. data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
  462. data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
  463. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  464. data/ext/pg_query/src_backend_nodes_list.c +16 -8
  465. data/ext/pg_query/src_backend_nodes_makefuncs.c +134 -1
  466. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +391 -133
  467. data/ext/pg_query/src_backend_nodes_value.c +1 -1
  468. data/ext/pg_query/src_backend_parser_gram.c +43710 -39953
  469. data/ext/pg_query/src_backend_parser_parser.c +34 -8
  470. data/ext/pg_query/src_backend_parser_scan.c +6971 -3373
  471. data/ext/pg_query/src_backend_parser_scansup.c +2 -1
  472. data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
  473. data/ext/pg_query/src_backend_tcop_postgres.c +99 -96
  474. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +2 -2
  475. data/ext/pg_query/src_backend_utils_adt_datum.c +2 -2
  476. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  477. data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
  478. data/ext/pg_query/src_backend_utils_adt_numutils.c +488 -0
  479. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +177 -30
  480. data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
  481. data/ext/pg_query/src_backend_utils_error_elog.c +397 -270
  482. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +36 -2
  483. data/ext/pg_query/src_backend_utils_init_globals.c +20 -5
  484. data/ext/pg_query/src_backend_utils_mb_mbutils.c +31 -84
  485. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +502 -0
  486. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +166 -0
  487. data/ext/pg_query/src_backend_utils_mmgr_aset.c +704 -497
  488. data/ext/pg_query/src_backend_utils_mmgr_bump.c +728 -0
  489. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1115 -0
  490. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +637 -233
  491. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1079 -0
  492. data/ext/pg_query/src_common_encnames.c +46 -44
  493. data/ext/pg_query/src_common_hashfn.c +1 -1
  494. data/ext/pg_query/src_common_keywords.c +1 -1
  495. data/ext/pg_query/src_common_kwlist_d.h +586 -517
  496. data/ext/pg_query/src_common_kwlookup.c +1 -1
  497. data/ext/pg_query/src_common_psprintf.c +3 -3
  498. data/ext/pg_query/src_common_stringinfo.c +21 -4
  499. data/ext/pg_query/src_common_wchar.c +100 -116
  500. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +99 -5
  501. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
  502. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +829 -763
  503. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  504. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
  505. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +19 -1
  506. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
  507. data/ext/pg_query/src_port_pg_bitutils.c +251 -32
  508. data/ext/pg_query/src_port_pgstrcasecmp.c +57 -1
  509. data/ext/pg_query/src_port_snprintf.c +20 -27
  510. data/ext/pg_query/src_port_strerror.c +1 -3
  511. data/ext/pg_query/src_port_strlcpy.c +79 -0
  512. data/lib/pg_query/fingerprint.rb +5 -8
  513. data/lib/pg_query/node.rb +16 -11
  514. data/lib/pg_query/param_refs.rb +2 -2
  515. data/lib/pg_query/parse.rb +6 -8
  516. data/lib/pg_query/parse_error.rb +1 -0
  517. data/lib/pg_query/pg_query_pb.rb +173 -3196
  518. data/lib/pg_query/scan.rb +1 -0
  519. data/lib/pg_query/treewalker.rb +52 -11
  520. data/lib/pg_query/truncate.rb +18 -20
  521. data/lib/pg_query/version.rb +1 -1
  522. metadata +443 -442
  523. data/ext/pg_query/guc-file.c +0 -0
  524. data/ext/pg_query/include/access/amapi.h +0 -290
  525. data/ext/pg_query/include/access/attmap.h +0 -52
  526. data/ext/pg_query/include/access/attnum.h +0 -64
  527. data/ext/pg_query/include/access/clog.h +0 -63
  528. data/ext/pg_query/include/access/commit_ts.h +0 -74
  529. data/ext/pg_query/include/access/detoast.h +0 -82
  530. data/ext/pg_query/include/access/genam.h +0 -231
  531. data/ext/pg_query/include/access/gin.h +0 -78
  532. data/ext/pg_query/include/access/htup.h +0 -89
  533. data/ext/pg_query/include/access/htup_details.h +0 -807
  534. data/ext/pg_query/include/access/itup.h +0 -167
  535. data/ext/pg_query/include/access/parallel.h +0 -82
  536. data/ext/pg_query/include/access/printtup.h +0 -35
  537. data/ext/pg_query/include/access/relation.h +0 -28
  538. data/ext/pg_query/include/access/relscan.h +0 -191
  539. data/ext/pg_query/include/access/rmgrlist.h +0 -49
  540. data/ext/pg_query/include/access/sdir.h +0 -58
  541. data/ext/pg_query/include/access/skey.h +0 -151
  542. data/ext/pg_query/include/access/stratnum.h +0 -85
  543. data/ext/pg_query/include/access/sysattr.h +0 -29
  544. data/ext/pg_query/include/access/table.h +0 -28
  545. data/ext/pg_query/include/access/tableam.h +0 -2077
  546. data/ext/pg_query/include/access/toast_compression.h +0 -73
  547. data/ext/pg_query/include/access/transam.h +0 -375
  548. data/ext/pg_query/include/access/tupconvert.h +0 -51
  549. data/ext/pg_query/include/access/tupdesc.h +0 -154
  550. data/ext/pg_query/include/access/tupmacs.h +0 -247
  551. data/ext/pg_query/include/access/twophase.h +0 -65
  552. data/ext/pg_query/include/access/xact.h +0 -523
  553. data/ext/pg_query/include/access/xlog.h +0 -303
  554. data/ext/pg_query/include/access/xlog_internal.h +0 -366
  555. data/ext/pg_query/include/access/xlogdefs.h +0 -101
  556. data/ext/pg_query/include/access/xlogprefetcher.h +0 -55
  557. data/ext/pg_query/include/access/xlogreader.h +0 -443
  558. data/ext/pg_query/include/access/xlogrecord.h +0 -236
  559. data/ext/pg_query/include/access/xlogrecovery.h +0 -157
  560. data/ext/pg_query/include/c.h +0 -1391
  561. data/ext/pg_query/include/catalog/catalog.h +0 -44
  562. data/ext/pg_query/include/catalog/catversion.h +0 -58
  563. data/ext/pg_query/include/catalog/dependency.h +0 -269
  564. data/ext/pg_query/include/catalog/genbki.h +0 -142
  565. data/ext/pg_query/include/catalog/index.h +0 -214
  566. data/ext/pg_query/include/catalog/indexing.h +0 -54
  567. data/ext/pg_query/include/catalog/namespace.h +0 -190
  568. data/ext/pg_query/include/catalog/objectaccess.h +0 -265
  569. data/ext/pg_query/include/catalog/objectaddress.h +0 -89
  570. data/ext/pg_query/include/catalog/pg_aggregate.h +0 -180
  571. data/ext/pg_query/include/catalog/pg_aggregate_d.h +0 -78
  572. data/ext/pg_query/include/catalog/pg_am.h +0 -63
  573. data/ext/pg_query/include/catalog/pg_am_d.h +0 -47
  574. data/ext/pg_query/include/catalog/pg_attribute.h +0 -221
  575. data/ext/pg_query/include/catalog/pg_attribute_d.h +0 -62
  576. data/ext/pg_query/include/catalog/pg_authid.h +0 -63
  577. data/ext/pg_query/include/catalog/pg_authid_d.h +0 -57
  578. data/ext/pg_query/include/catalog/pg_class.h +0 -230
  579. data/ext/pg_query/include/catalog/pg_class_d.h +0 -132
  580. data/ext/pg_query/include/catalog/pg_collation.h +0 -98
  581. data/ext/pg_query/include/catalog/pg_collation_d.h +0 -62
  582. data/ext/pg_query/include/catalog/pg_constraint.h +0 -273
  583. data/ext/pg_query/include/catalog/pg_constraint_d.h +0 -73
  584. data/ext/pg_query/include/catalog/pg_control.h +0 -250
  585. data/ext/pg_query/include/catalog/pg_conversion.h +0 -75
  586. data/ext/pg_query/include/catalog/pg_conversion_d.h +0 -38
  587. data/ext/pg_query/include/catalog/pg_depend.h +0 -77
  588. data/ext/pg_query/include/catalog/pg_depend_d.h +0 -36
  589. data/ext/pg_query/include/catalog/pg_event_trigger.h +0 -57
  590. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +0 -36
  591. data/ext/pg_query/include/catalog/pg_index.h +0 -90
  592. data/ext/pg_query/include/catalog/pg_index_d.h +0 -59
  593. data/ext/pg_query/include/catalog/pg_language.h +0 -72
  594. data/ext/pg_query/include/catalog/pg_language_d.h +0 -41
  595. data/ext/pg_query/include/catalog/pg_namespace.h +0 -64
  596. data/ext/pg_query/include/catalog/pg_namespace_d.h +0 -36
  597. data/ext/pg_query/include/catalog/pg_opclass.h +0 -88
  598. data/ext/pg_query/include/catalog/pg_opclass_d.h +0 -51
  599. data/ext/pg_query/include/catalog/pg_operator.h +0 -107
  600. data/ext/pg_query/include/catalog/pg_operator_d.h +0 -142
  601. data/ext/pg_query/include/catalog/pg_opfamily.h +0 -63
  602. data/ext/pg_query/include/catalog/pg_opfamily_d.h +0 -49
  603. data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
  604. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
  605. data/ext/pg_query/include/catalog/pg_partitioned_table.h +0 -74
  606. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +0 -36
  607. data/ext/pg_query/include/catalog/pg_proc.h +0 -220
  608. data/ext/pg_query/include/catalog/pg_proc_d.h +0 -101
  609. data/ext/pg_query/include/catalog/pg_publication.h +0 -161
  610. data/ext/pg_query/include/catalog/pg_publication_d.h +0 -38
  611. data/ext/pg_query/include/catalog/pg_replication_origin.h +0 -62
  612. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +0 -33
  613. data/ext/pg_query/include/catalog/pg_statistic.h +0 -282
  614. data/ext/pg_query/include/catalog/pg_statistic_d.h +0 -195
  615. data/ext/pg_query/include/catalog/pg_statistic_ext.h +0 -88
  616. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +0 -45
  617. data/ext/pg_query/include/catalog/pg_transform.h +0 -48
  618. data/ext/pg_query/include/catalog/pg_transform_d.h +0 -34
  619. data/ext/pg_query/include/catalog/pg_trigger.h +0 -153
  620. data/ext/pg_query/include/catalog/pg_trigger_d.h +0 -109
  621. data/ext/pg_query/include/catalog/pg_ts_config.h +0 -53
  622. data/ext/pg_query/include/catalog/pg_ts_config_d.h +0 -34
  623. data/ext/pg_query/include/catalog/pg_ts_dict.h +0 -59
  624. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +0 -35
  625. data/ext/pg_query/include/catalog/pg_ts_parser.h +0 -60
  626. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +0 -37
  627. data/ext/pg_query/include/catalog/pg_ts_template.h +0 -51
  628. data/ext/pg_query/include/catalog/pg_ts_template_d.h +0 -34
  629. data/ext/pg_query/include/catalog/pg_type.h +0 -404
  630. data/ext/pg_query/include/catalog/pg_type_d.h +0 -324
  631. data/ext/pg_query/include/catalog/storage.h +0 -50
  632. data/ext/pg_query/include/commands/async.h +0 -53
  633. data/ext/pg_query/include/commands/dbcommands.h +0 -36
  634. data/ext/pg_query/include/commands/defrem.h +0 -160
  635. data/ext/pg_query/include/commands/event_trigger.h +0 -88
  636. data/ext/pg_query/include/commands/explain.h +0 -127
  637. data/ext/pg_query/include/commands/prepare.h +0 -61
  638. data/ext/pg_query/include/commands/tablespace.h +0 -69
  639. data/ext/pg_query/include/commands/trigger.h +0 -287
  640. data/ext/pg_query/include/commands/user.h +0 -37
  641. data/ext/pg_query/include/commands/vacuum.h +0 -340
  642. data/ext/pg_query/include/commands/variable.h +0 -38
  643. data/ext/pg_query/include/common/file_perm.h +0 -56
  644. data/ext/pg_query/include/common/hashfn.h +0 -104
  645. data/ext/pg_query/include/common/ip.h +0 -31
  646. data/ext/pg_query/include/common/keywords.h +0 -29
  647. data/ext/pg_query/include/common/kwlookup.h +0 -44
  648. data/ext/pg_query/include/common/pg_prng.h +0 -60
  649. data/ext/pg_query/include/common/relpath.h +0 -90
  650. data/ext/pg_query/include/common/string.h +0 -42
  651. data/ext/pg_query/include/common/unicode_combining_table.h +0 -308
  652. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +0 -125
  653. data/ext/pg_query/include/datatype/timestamp.h +0 -236
  654. data/ext/pg_query/include/executor/execdesc.h +0 -70
  655. data/ext/pg_query/include/executor/executor.h +0 -663
  656. data/ext/pg_query/include/executor/functions.h +0 -55
  657. data/ext/pg_query/include/executor/instrument.h +0 -118
  658. data/ext/pg_query/include/executor/spi.h +0 -213
  659. data/ext/pg_query/include/executor/tablefunc.h +0 -67
  660. data/ext/pg_query/include/executor/tuptable.h +0 -487
  661. data/ext/pg_query/include/fmgr.h +0 -781
  662. data/ext/pg_query/include/funcapi.h +0 -360
  663. data/ext/pg_query/include/getaddrinfo.h +0 -162
  664. data/ext/pg_query/include/jit/jit.h +0 -105
  665. data/ext/pg_query/include/kwlist_d.h +0 -1095
  666. data/ext/pg_query/include/lib/dshash.h +0 -112
  667. data/ext/pg_query/include/lib/ilist.h +0 -746
  668. data/ext/pg_query/include/lib/pairingheap.h +0 -102
  669. data/ext/pg_query/include/lib/simplehash.h +0 -1184
  670. data/ext/pg_query/include/lib/sort_template.h +0 -432
  671. data/ext/pg_query/include/lib/stringinfo.h +0 -161
  672. data/ext/pg_query/include/libpq/auth.h +0 -31
  673. data/ext/pg_query/include/libpq/crypt.h +0 -47
  674. data/ext/pg_query/include/libpq/hba.h +0 -179
  675. data/ext/pg_query/include/libpq/libpq-be.h +0 -343
  676. data/ext/pg_query/include/libpq/libpq.h +0 -144
  677. data/ext/pg_query/include/libpq/pqcomm.h +0 -194
  678. data/ext/pg_query/include/libpq/pqformat.h +0 -210
  679. data/ext/pg_query/include/libpq/pqsignal.h +0 -42
  680. data/ext/pg_query/include/mb/pg_wchar.h +0 -755
  681. data/ext/pg_query/include/mb/stringinfo_mb.h +0 -24
  682. data/ext/pg_query/include/miscadmin.h +0 -495
  683. data/ext/pg_query/include/nodes/bitmapset.h +0 -122
  684. data/ext/pg_query/include/nodes/execnodes.h +0 -2715
  685. data/ext/pg_query/include/nodes/extensible.h +0 -162
  686. data/ext/pg_query/include/nodes/lockoptions.h +0 -61
  687. data/ext/pg_query/include/nodes/makefuncs.h +0 -109
  688. data/ext/pg_query/include/nodes/memnodes.h +0 -110
  689. data/ext/pg_query/include/nodes/nodeFuncs.h +0 -162
  690. data/ext/pg_query/include/nodes/nodes.h +0 -861
  691. data/ext/pg_query/include/nodes/params.h +0 -170
  692. data/ext/pg_query/include/nodes/parsenodes.h +0 -3812
  693. data/ext/pg_query/include/nodes/pathnodes.h +0 -2734
  694. data/ext/pg_query/include/nodes/pg_list.h +0 -612
  695. data/ext/pg_query/include/nodes/plannodes.h +0 -1349
  696. data/ext/pg_query/include/nodes/primnodes.h +0 -1593
  697. data/ext/pg_query/include/nodes/print.h +0 -34
  698. data/ext/pg_query/include/nodes/tidbitmap.h +0 -75
  699. data/ext/pg_query/include/nodes/value.h +0 -80
  700. data/ext/pg_query/include/optimizer/cost.h +0 -213
  701. data/ext/pg_query/include/optimizer/geqo.h +0 -90
  702. data/ext/pg_query/include/optimizer/geqo_gene.h +0 -45
  703. data/ext/pg_query/include/optimizer/optimizer.h +0 -202
  704. data/ext/pg_query/include/optimizer/paths.h +0 -257
  705. data/ext/pg_query/include/optimizer/planmain.h +0 -120
  706. data/ext/pg_query/include/parser/analyze.h +0 -63
  707. data/ext/pg_query/include/parser/gram.h +0 -1101
  708. data/ext/pg_query/include/parser/gramparse.h +0 -75
  709. data/ext/pg_query/include/parser/kwlist.h +0 -487
  710. data/ext/pg_query/include/parser/parse_agg.h +0 -63
  711. data/ext/pg_query/include/parser/parse_coerce.h +0 -100
  712. data/ext/pg_query/include/parser/parse_expr.h +0 -25
  713. data/ext/pg_query/include/parser/parse_func.h +0 -74
  714. data/ext/pg_query/include/parser/parse_node.h +0 -339
  715. data/ext/pg_query/include/parser/parse_oper.h +0 -65
  716. data/ext/pg_query/include/parser/parse_relation.h +0 -124
  717. data/ext/pg_query/include/parser/parse_type.h +0 -60
  718. data/ext/pg_query/include/parser/parser.h +0 -68
  719. data/ext/pg_query/include/parser/parsetree.h +0 -61
  720. data/ext/pg_query/include/parser/scanner.h +0 -152
  721. data/ext/pg_query/include/parser/scansup.h +0 -27
  722. data/ext/pg_query/include/partitioning/partdefs.h +0 -26
  723. data/ext/pg_query/include/pg_config.h +0 -1037
  724. data/ext/pg_query/include/pg_config_manual.h +0 -410
  725. data/ext/pg_query/include/pg_config_os.h +0 -8
  726. data/ext/pg_query/include/pg_getopt.h +0 -56
  727. data/ext/pg_query/include/pg_trace.h +0 -17
  728. data/ext/pg_query/include/pgstat.h +0 -699
  729. data/ext/pg_query/include/pgtime.h +0 -94
  730. data/ext/pg_query/include/pl_gram.h +0 -383
  731. data/ext/pg_query/include/pl_reserved_kwlist.h +0 -52
  732. data/ext/pg_query/include/pl_reserved_kwlist_d.h +0 -114
  733. data/ext/pg_query/include/pl_unreserved_kwlist.h +0 -111
  734. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +0 -244
  735. data/ext/pg_query/include/plerrcodes.h +0 -998
  736. data/ext/pg_query/include/plpgsql.h +0 -1345
  737. data/ext/pg_query/include/port/atomics/arch-arm.h +0 -32
  738. data/ext/pg_query/include/port/atomics/arch-ppc.h +0 -254
  739. data/ext/pg_query/include/port/atomics/arch-x86.h +0 -252
  740. data/ext/pg_query/include/port/atomics/fallback.h +0 -170
  741. data/ext/pg_query/include/port/atomics/generic-gcc.h +0 -286
  742. data/ext/pg_query/include/port/atomics/generic.h +0 -401
  743. data/ext/pg_query/include/port/atomics.h +0 -524
  744. data/ext/pg_query/include/port/pg_bitutils.h +0 -302
  745. data/ext/pg_query/include/port/pg_bswap.h +0 -161
  746. data/ext/pg_query/include/port/pg_crc32c.h +0 -101
  747. data/ext/pg_query/include/port.h +0 -553
  748. data/ext/pg_query/include/portability/instr_time.h +0 -256
  749. data/ext/pg_query/include/postgres.h +0 -808
  750. data/ext/pg_query/include/postgres_ext.h +0 -74
  751. data/ext/pg_query/include/postmaster/autovacuum.h +0 -83
  752. data/ext/pg_query/include/postmaster/auxprocess.h +0 -20
  753. data/ext/pg_query/include/postmaster/bgworker.h +0 -162
  754. data/ext/pg_query/include/postmaster/bgworker_internals.h +0 -64
  755. data/ext/pg_query/include/postmaster/bgwriter.h +0 -45
  756. data/ext/pg_query/include/postmaster/fork_process.h +0 -17
  757. data/ext/pg_query/include/postmaster/interrupt.h +0 -32
  758. data/ext/pg_query/include/postmaster/pgarch.h +0 -73
  759. data/ext/pg_query/include/postmaster/postmaster.h +0 -78
  760. data/ext/pg_query/include/postmaster/startup.h +0 -39
  761. data/ext/pg_query/include/postmaster/syslogger.h +0 -103
  762. data/ext/pg_query/include/postmaster/walwriter.h +0 -21
  763. data/ext/pg_query/include/regex/regex.h +0 -186
  764. data/ext/pg_query/include/replication/logicallauncher.h +0 -29
  765. data/ext/pg_query/include/replication/logicalproto.h +0 -254
  766. data/ext/pg_query/include/replication/logicalworker.h +0 -19
  767. data/ext/pg_query/include/replication/origin.h +0 -73
  768. data/ext/pg_query/include/replication/reorderbuffer.h +0 -685
  769. data/ext/pg_query/include/replication/slot.h +0 -230
  770. data/ext/pg_query/include/replication/syncrep.h +0 -115
  771. data/ext/pg_query/include/replication/walreceiver.h +0 -472
  772. data/ext/pg_query/include/replication/walsender.h +0 -74
  773. data/ext/pg_query/include/rewrite/prs2lock.h +0 -46
  774. data/ext/pg_query/include/rewrite/rewriteHandler.h +0 -38
  775. data/ext/pg_query/include/rewrite/rewriteManip.h +0 -87
  776. data/ext/pg_query/include/rewrite/rewriteSupport.h +0 -26
  777. data/ext/pg_query/include/storage/backendid.h +0 -37
  778. data/ext/pg_query/include/storage/block.h +0 -115
  779. data/ext/pg_query/include/storage/buf.h +0 -46
  780. data/ext/pg_query/include/storage/bufmgr.h +0 -297
  781. data/ext/pg_query/include/storage/bufpage.h +0 -457
  782. data/ext/pg_query/include/storage/condition_variable.h +0 -73
  783. data/ext/pg_query/include/storage/dsm.h +0 -64
  784. data/ext/pg_query/include/storage/dsm_impl.h +0 -76
  785. data/ext/pg_query/include/storage/fd.h +0 -198
  786. data/ext/pg_query/include/storage/fileset.h +0 -40
  787. data/ext/pg_query/include/storage/ipc.h +0 -84
  788. data/ext/pg_query/include/storage/item.h +0 -19
  789. data/ext/pg_query/include/storage/itemid.h +0 -184
  790. data/ext/pg_query/include/storage/itemptr.h +0 -208
  791. data/ext/pg_query/include/storage/large_object.h +0 -100
  792. data/ext/pg_query/include/storage/latch.h +0 -186
  793. data/ext/pg_query/include/storage/lmgr.h +0 -115
  794. data/ext/pg_query/include/storage/lock.h +0 -616
  795. data/ext/pg_query/include/storage/lockdefs.h +0 -59
  796. data/ext/pg_query/include/storage/lwlock.h +0 -206
  797. data/ext/pg_query/include/storage/lwlocknames.h +0 -50
  798. data/ext/pg_query/include/storage/off.h +0 -57
  799. data/ext/pg_query/include/storage/pg_sema.h +0 -61
  800. data/ext/pg_query/include/storage/pg_shmem.h +0 -92
  801. data/ext/pg_query/include/storage/pmsignal.h +0 -105
  802. data/ext/pg_query/include/storage/predicate.h +0 -87
  803. data/ext/pg_query/include/storage/proc.h +0 -461
  804. data/ext/pg_query/include/storage/procarray.h +0 -98
  805. data/ext/pg_query/include/storage/proclist_types.h +0 -51
  806. data/ext/pg_query/include/storage/procsignal.h +0 -71
  807. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  808. data/ext/pg_query/include/storage/s_lock.h +0 -1110
  809. data/ext/pg_query/include/storage/sharedfileset.h +0 -37
  810. data/ext/pg_query/include/storage/shm_mq.h +0 -86
  811. data/ext/pg_query/include/storage/shm_toc.h +0 -58
  812. data/ext/pg_query/include/storage/shmem.h +0 -81
  813. data/ext/pg_query/include/storage/sinval.h +0 -153
  814. data/ext/pg_query/include/storage/sinvaladt.h +0 -43
  815. data/ext/pg_query/include/storage/smgr.h +0 -111
  816. data/ext/pg_query/include/storage/spin.h +0 -77
  817. data/ext/pg_query/include/storage/standby.h +0 -98
  818. data/ext/pg_query/include/storage/standbydefs.h +0 -74
  819. data/ext/pg_query/include/storage/sync.h +0 -66
  820. data/ext/pg_query/include/tcop/cmdtag.h +0 -58
  821. data/ext/pg_query/include/tcop/cmdtaglist.h +0 -218
  822. data/ext/pg_query/include/tcop/deparse_utility.h +0 -108
  823. data/ext/pg_query/include/tcop/dest.h +0 -149
  824. data/ext/pg_query/include/tcop/fastpath.h +0 -20
  825. data/ext/pg_query/include/tcop/pquery.h +0 -51
  826. data/ext/pg_query/include/tcop/tcopprot.h +0 -97
  827. data/ext/pg_query/include/tcop/utility.h +0 -112
  828. data/ext/pg_query/include/tsearch/ts_cache.h +0 -98
  829. data/ext/pg_query/include/utils/acl.h +0 -333
  830. data/ext/pg_query/include/utils/aclchk_internal.h +0 -45
  831. data/ext/pg_query/include/utils/array.h +0 -464
  832. data/ext/pg_query/include/utils/backend_progress.h +0 -44
  833. data/ext/pg_query/include/utils/backend_status.h +0 -321
  834. data/ext/pg_query/include/utils/builtins.h +0 -127
  835. data/ext/pg_query/include/utils/bytea.h +0 -28
  836. data/ext/pg_query/include/utils/catcache.h +0 -231
  837. data/ext/pg_query/include/utils/date.h +0 -90
  838. data/ext/pg_query/include/utils/datetime.h +0 -344
  839. data/ext/pg_query/include/utils/datum.h +0 -76
  840. data/ext/pg_query/include/utils/dsa.h +0 -123
  841. data/ext/pg_query/include/utils/dynahash.h +0 -20
  842. data/ext/pg_query/include/utils/elog.h +0 -470
  843. data/ext/pg_query/include/utils/errcodes.h +0 -354
  844. data/ext/pg_query/include/utils/expandeddatum.h +0 -159
  845. data/ext/pg_query/include/utils/expandedrecord.h +0 -231
  846. data/ext/pg_query/include/utils/float.h +0 -356
  847. data/ext/pg_query/include/utils/fmgroids.h +0 -3261
  848. data/ext/pg_query/include/utils/fmgrprotos.h +0 -2829
  849. data/ext/pg_query/include/utils/fmgrtab.h +0 -49
  850. data/ext/pg_query/include/utils/guc.h +0 -469
  851. data/ext/pg_query/include/utils/guc_tables.h +0 -276
  852. data/ext/pg_query/include/utils/hsearch.h +0 -153
  853. data/ext/pg_query/include/utils/inval.h +0 -68
  854. data/ext/pg_query/include/utils/lsyscache.h +0 -208
  855. data/ext/pg_query/include/utils/memdebug.h +0 -82
  856. data/ext/pg_query/include/utils/memutils.h +0 -230
  857. data/ext/pg_query/include/utils/numeric.h +0 -90
  858. data/ext/pg_query/include/utils/palloc.h +0 -158
  859. data/ext/pg_query/include/utils/partcache.h +0 -102
  860. data/ext/pg_query/include/utils/pg_locale.h +0 -127
  861. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  862. data/ext/pg_query/include/utils/pgstat_internal.h +0 -784
  863. data/ext/pg_query/include/utils/pidfile.h +0 -56
  864. data/ext/pg_query/include/utils/plancache.h +0 -236
  865. data/ext/pg_query/include/utils/portal.h +0 -252
  866. data/ext/pg_query/include/utils/probes.h +0 -114
  867. data/ext/pg_query/include/utils/ps_status.h +0 -25
  868. data/ext/pg_query/include/utils/queryenvironment.h +0 -74
  869. data/ext/pg_query/include/utils/queryjumble.h +0 -88
  870. data/ext/pg_query/include/utils/regproc.h +0 -39
  871. data/ext/pg_query/include/utils/rel.h +0 -695
  872. data/ext/pg_query/include/utils/relcache.h +0 -153
  873. data/ext/pg_query/include/utils/reltrigger.h +0 -81
  874. data/ext/pg_query/include/utils/resowner.h +0 -86
  875. data/ext/pg_query/include/utils/rls.h +0 -50
  876. data/ext/pg_query/include/utils/ruleutils.h +0 -47
  877. data/ext/pg_query/include/utils/sharedtuplestore.h +0 -61
  878. data/ext/pg_query/include/utils/snapmgr.h +0 -179
  879. data/ext/pg_query/include/utils/snapshot.h +0 -219
  880. data/ext/pg_query/include/utils/sortsupport.h +0 -391
  881. data/ext/pg_query/include/utils/syscache.h +0 -224
  882. data/ext/pg_query/include/utils/timeout.h +0 -95
  883. data/ext/pg_query/include/utils/timestamp.h +0 -117
  884. data/ext/pg_query/include/utils/tuplesort.h +0 -291
  885. data/ext/pg_query/include/utils/tuplestore.h +0 -91
  886. data/ext/pg_query/include/utils/typcache.h +0 -209
  887. data/ext/pg_query/include/utils/tzparser.h +0 -39
  888. data/ext/pg_query/include/utils/varlena.h +0 -41
  889. data/ext/pg_query/include/utils/wait_event.h +0 -289
  890. data/ext/pg_query/include/utils/xml.h +0 -84
  891. data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2201
  892. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -371
  893. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
  894. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
  895. data/ext/pg_query/src_common_pg_prng.c +0 -152
  896. data/ext/pg_query/src_common_string.c +0 -92
  897. data/ext/pg_query/src_port_pgsleep.c +0 -69
  898. data/ext/pg_query/src_port_strnlen.c +0 -39
  899. /data/ext/pg_query/{pg_query_ruby.sym → ext_symbols.sym} +0 -0
  900. /data/ext/pg_query/include/{access → postgres/access}/rmgr.h +0 -0
  901. /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
@@ -0,0 +1,811 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * htup_details.h
4
+ * POSTGRES heap tuple header definitions.
5
+ *
6
+ *
7
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1994, Regents of the University of California
9
+ *
10
+ * src/include/access/htup_details.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef HTUP_DETAILS_H
15
+ #define HTUP_DETAILS_H
16
+
17
+ #include "access/htup.h"
18
+ #include "access/transam.h"
19
+ #include "access/tupdesc.h"
20
+ #include "access/tupmacs.h"
21
+ #include "storage/bufpage.h"
22
+ #include "varatt.h"
23
+
24
+ /*
25
+ * MaxTupleAttributeNumber limits the number of (user) columns in a tuple.
26
+ * The key limit on this value is that the size of the fixed overhead for
27
+ * a tuple, plus the size of the null-values bitmap (at 1 bit per column),
28
+ * plus MAXALIGN alignment, must fit into t_hoff which is uint8. On most
29
+ * machines the upper limit without making t_hoff wider would be a little
30
+ * over 1700. We use round numbers here and for MaxHeapAttributeNumber
31
+ * so that alterations in HeapTupleHeaderData layout won't change the
32
+ * supported max number of columns.
33
+ */
34
+ #define MaxTupleAttributeNumber 1664 /* 8 * 208 */
35
+
36
+ /*
37
+ * MaxHeapAttributeNumber limits the number of (user) columns in a table.
38
+ * This should be somewhat less than MaxTupleAttributeNumber. It must be
39
+ * at least one less, else we will fail to do UPDATEs on a maximal-width
40
+ * table (because UPDATE has to form working tuples that include CTID).
41
+ * In practice we want some additional daylight so that we can gracefully
42
+ * support operations that add hidden "resjunk" columns, for example
43
+ * SELECT * FROM wide_table ORDER BY foo, bar, baz.
44
+ * In any case, depending on column data types you will likely be running
45
+ * into the disk-block-based limit on overall tuple size if you have more
46
+ * than a thousand or so columns. TOAST won't help.
47
+ */
48
+ #define MaxHeapAttributeNumber 1600 /* 8 * 200 */
49
+
50
+ /*
51
+ * Heap tuple header. To avoid wasting space, the fields should be
52
+ * laid out in such a way as to avoid structure padding.
53
+ *
54
+ * Datums of composite types (row types) share the same general structure
55
+ * as on-disk tuples, so that the same routines can be used to build and
56
+ * examine them. However the requirements are slightly different: a Datum
57
+ * does not need any transaction visibility information, and it does need
58
+ * a length word and some embedded type information. We can achieve this
59
+ * by overlaying the xmin/cmin/xmax/cmax/xvac fields of a heap tuple
60
+ * with the fields needed in the Datum case. Typically, all tuples built
61
+ * in-memory will be initialized with the Datum fields; but when a tuple is
62
+ * about to be inserted in a table, the transaction fields will be filled,
63
+ * overwriting the datum fields.
64
+ *
65
+ * The overall structure of a heap tuple looks like:
66
+ * fixed fields (HeapTupleHeaderData struct)
67
+ * nulls bitmap (if HEAP_HASNULL is set in t_infomask)
68
+ * alignment padding (as needed to make user data MAXALIGN'd)
69
+ * object ID (if HEAP_HASOID_OLD is set in t_infomask, not created
70
+ * anymore)
71
+ * user data fields
72
+ *
73
+ * We store five "virtual" fields Xmin, Cmin, Xmax, Cmax, and Xvac in three
74
+ * physical fields. Xmin and Xmax are always really stored, but Cmin, Cmax
75
+ * and Xvac share a field. This works because we know that Cmin and Cmax
76
+ * are only interesting for the lifetime of the inserting and deleting
77
+ * transaction respectively. If a tuple is inserted and deleted in the same
78
+ * transaction, we store a "combo" command id that can be mapped to the real
79
+ * cmin and cmax, but only by use of local state within the originating
80
+ * backend. See combocid.c for more details. Meanwhile, Xvac is only set by
81
+ * old-style VACUUM FULL, which does not have any command sub-structure and so
82
+ * does not need either Cmin or Cmax. (This requires that old-style VACUUM
83
+ * FULL never try to move a tuple whose Cmin or Cmax is still interesting,
84
+ * ie, an insert-in-progress or delete-in-progress tuple.)
85
+ *
86
+ * A word about t_ctid: whenever a new tuple is stored on disk, its t_ctid
87
+ * is initialized with its own TID (location). If the tuple is ever updated,
88
+ * its t_ctid is changed to point to the replacement version of the tuple. Or
89
+ * if the tuple is moved from one partition to another, due to an update of
90
+ * the partition key, t_ctid is set to a special value to indicate that
91
+ * (see ItemPointerSetMovedPartitions). Thus, a tuple is the latest version
92
+ * of its row iff XMAX is invalid or
93
+ * t_ctid points to itself (in which case, if XMAX is valid, the tuple is
94
+ * either locked or deleted). One can follow the chain of t_ctid links
95
+ * to find the newest version of the row, unless it was moved to a different
96
+ * partition. Beware however that VACUUM might
97
+ * erase the pointed-to (newer) tuple before erasing the pointing (older)
98
+ * tuple. Hence, when following a t_ctid link, it is necessary to check
99
+ * to see if the referenced slot is empty or contains an unrelated tuple.
100
+ * Check that the referenced tuple has XMIN equal to the referencing tuple's
101
+ * XMAX to verify that it is actually the descendant version and not an
102
+ * unrelated tuple stored into a slot recently freed by VACUUM. If either
103
+ * check fails, one may assume that there is no live descendant version.
104
+ *
105
+ * t_ctid is sometimes used to store a speculative insertion token, instead
106
+ * of a real TID. A speculative token is set on a tuple that's being
107
+ * inserted, until the inserter is sure that it wants to go ahead with the
108
+ * insertion. Hence a token should only be seen on a tuple with an XMAX
109
+ * that's still in-progress, or invalid/aborted. The token is replaced with
110
+ * the tuple's real TID when the insertion is confirmed. One should never
111
+ * see a speculative insertion token while following a chain of t_ctid links,
112
+ * because they are not used on updates, only insertions.
113
+ *
114
+ * Following the fixed header fields, the nulls bitmap is stored (beginning
115
+ * at t_bits). The bitmap is *not* stored if t_infomask shows that there
116
+ * are no nulls in the tuple. If an OID field is present (as indicated by
117
+ * t_infomask), then it is stored just before the user data, which begins at
118
+ * the offset shown by t_hoff. Note that t_hoff must be a multiple of
119
+ * MAXALIGN.
120
+ */
121
+
122
+ typedef struct HeapTupleFields
123
+ {
124
+ TransactionId t_xmin; /* inserting xact ID */
125
+ TransactionId t_xmax; /* deleting or locking xact ID */
126
+
127
+ union
128
+ {
129
+ CommandId t_cid; /* inserting or deleting command ID, or both */
130
+ TransactionId t_xvac; /* old-style VACUUM FULL xact ID */
131
+ } t_field3;
132
+ } HeapTupleFields;
133
+
134
+ typedef struct DatumTupleFields
135
+ {
136
+ int32 datum_len_; /* varlena header (do not touch directly!) */
137
+
138
+ int32 datum_typmod; /* -1, or identifier of a record type */
139
+
140
+ Oid datum_typeid; /* composite type OID, or RECORDOID */
141
+
142
+ /*
143
+ * datum_typeid cannot be a domain over composite, only plain composite,
144
+ * even if the datum is meant as a value of a domain-over-composite type.
145
+ * This is in line with the general principle that CoerceToDomain does not
146
+ * change the physical representation of the base type value.
147
+ *
148
+ * Note: field ordering is chosen with thought that Oid might someday
149
+ * widen to 64 bits.
150
+ */
151
+ } DatumTupleFields;
152
+
153
+ struct HeapTupleHeaderData
154
+ {
155
+ union
156
+ {
157
+ HeapTupleFields t_heap;
158
+ DatumTupleFields t_datum;
159
+ } t_choice;
160
+
161
+ ItemPointerData t_ctid; /* current TID of this or newer tuple (or a
162
+ * speculative insertion token) */
163
+
164
+ /* Fields below here must match MinimalTupleData! */
165
+
166
+ #define FIELDNO_HEAPTUPLEHEADERDATA_INFOMASK2 2
167
+ uint16 t_infomask2; /* number of attributes + various flags */
168
+
169
+ #define FIELDNO_HEAPTUPLEHEADERDATA_INFOMASK 3
170
+ uint16 t_infomask; /* various flag bits, see below */
171
+
172
+ #define FIELDNO_HEAPTUPLEHEADERDATA_HOFF 4
173
+ uint8 t_hoff; /* sizeof header incl. bitmap, padding */
174
+
175
+ /* ^ - 23 bytes - ^ */
176
+
177
+ #define FIELDNO_HEAPTUPLEHEADERDATA_BITS 5
178
+ bits8 t_bits[FLEXIBLE_ARRAY_MEMBER]; /* bitmap of NULLs */
179
+
180
+ /* MORE DATA FOLLOWS AT END OF STRUCT */
181
+ };
182
+
183
+ /* typedef appears in htup.h */
184
+
185
+ #define SizeofHeapTupleHeader offsetof(HeapTupleHeaderData, t_bits)
186
+
187
+ /*
188
+ * information stored in t_infomask:
189
+ */
190
+ #define HEAP_HASNULL 0x0001 /* has null attribute(s) */
191
+ #define HEAP_HASVARWIDTH 0x0002 /* has variable-width attribute(s) */
192
+ #define HEAP_HASEXTERNAL 0x0004 /* has external stored attribute(s) */
193
+ #define HEAP_HASOID_OLD 0x0008 /* has an object-id field */
194
+ #define HEAP_XMAX_KEYSHR_LOCK 0x0010 /* xmax is a key-shared locker */
195
+ #define HEAP_COMBOCID 0x0020 /* t_cid is a combo CID */
196
+ #define HEAP_XMAX_EXCL_LOCK 0x0040 /* xmax is exclusive locker */
197
+ #define HEAP_XMAX_LOCK_ONLY 0x0080 /* xmax, if valid, is only a locker */
198
+
199
+ /* xmax is a shared locker */
200
+ #define HEAP_XMAX_SHR_LOCK (HEAP_XMAX_EXCL_LOCK | HEAP_XMAX_KEYSHR_LOCK)
201
+
202
+ #define HEAP_LOCK_MASK (HEAP_XMAX_SHR_LOCK | HEAP_XMAX_EXCL_LOCK | \
203
+ HEAP_XMAX_KEYSHR_LOCK)
204
+ #define HEAP_XMIN_COMMITTED 0x0100 /* t_xmin committed */
205
+ #define HEAP_XMIN_INVALID 0x0200 /* t_xmin invalid/aborted */
206
+ #define HEAP_XMIN_FROZEN (HEAP_XMIN_COMMITTED|HEAP_XMIN_INVALID)
207
+ #define HEAP_XMAX_COMMITTED 0x0400 /* t_xmax committed */
208
+ #define HEAP_XMAX_INVALID 0x0800 /* t_xmax invalid/aborted */
209
+ #define HEAP_XMAX_IS_MULTI 0x1000 /* t_xmax is a MultiXactId */
210
+ #define HEAP_UPDATED 0x2000 /* this is UPDATEd version of row */
211
+ #define HEAP_MOVED_OFF 0x4000 /* moved to another place by pre-9.0
212
+ * VACUUM FULL; kept for binary
213
+ * upgrade support */
214
+ #define HEAP_MOVED_IN 0x8000 /* moved from another place by pre-9.0
215
+ * VACUUM FULL; kept for binary
216
+ * upgrade support */
217
+ #define HEAP_MOVED (HEAP_MOVED_OFF | HEAP_MOVED_IN)
218
+
219
+ #define HEAP_XACT_MASK 0xFFF0 /* visibility-related bits */
220
+
221
+ /*
222
+ * A tuple is only locked (i.e. not updated by its Xmax) if the
223
+ * HEAP_XMAX_LOCK_ONLY bit is set; or, for pg_upgrade's sake, if the Xmax is
224
+ * not a multi and the EXCL_LOCK bit is set.
225
+ *
226
+ * See also HeapTupleHeaderIsOnlyLocked, which also checks for a possible
227
+ * aborted updater transaction.
228
+ *
229
+ * Beware of multiple evaluations of the argument.
230
+ */
231
+ #define HEAP_XMAX_IS_LOCKED_ONLY(infomask) \
232
+ (((infomask) & HEAP_XMAX_LOCK_ONLY) || \
233
+ (((infomask) & (HEAP_XMAX_IS_MULTI | HEAP_LOCK_MASK)) == HEAP_XMAX_EXCL_LOCK))
234
+
235
+ /*
236
+ * A tuple that has HEAP_XMAX_IS_MULTI and HEAP_XMAX_LOCK_ONLY but neither of
237
+ * HEAP_XMAX_EXCL_LOCK and HEAP_XMAX_KEYSHR_LOCK must come from a tuple that was
238
+ * share-locked in 9.2 or earlier and then pg_upgrade'd.
239
+ *
240
+ * In 9.2 and prior, HEAP_XMAX_IS_MULTI was only set when there were multiple
241
+ * FOR SHARE lockers of that tuple. That set HEAP_XMAX_LOCK_ONLY (with a
242
+ * different name back then) but neither of HEAP_XMAX_EXCL_LOCK and
243
+ * HEAP_XMAX_KEYSHR_LOCK. That combination is no longer possible in 9.3 and
244
+ * up, so if we see that combination we know for certain that the tuple was
245
+ * locked in an earlier release; since all such lockers are gone (they cannot
246
+ * survive through pg_upgrade), such tuples can safely be considered not
247
+ * locked.
248
+ *
249
+ * We must not resolve such multixacts locally, because the result would be
250
+ * bogus, regardless of where they stand with respect to the current valid
251
+ * multixact range.
252
+ */
253
+ #define HEAP_LOCKED_UPGRADED(infomask) \
254
+ ( \
255
+ ((infomask) & HEAP_XMAX_IS_MULTI) != 0 && \
256
+ ((infomask) & HEAP_XMAX_LOCK_ONLY) != 0 && \
257
+ (((infomask) & (HEAP_XMAX_EXCL_LOCK | HEAP_XMAX_KEYSHR_LOCK)) == 0) \
258
+ )
259
+
260
+ /*
261
+ * Use these to test whether a particular lock is applied to a tuple
262
+ */
263
+ #define HEAP_XMAX_IS_SHR_LOCKED(infomask) \
264
+ (((infomask) & HEAP_LOCK_MASK) == HEAP_XMAX_SHR_LOCK)
265
+ #define HEAP_XMAX_IS_EXCL_LOCKED(infomask) \
266
+ (((infomask) & HEAP_LOCK_MASK) == HEAP_XMAX_EXCL_LOCK)
267
+ #define HEAP_XMAX_IS_KEYSHR_LOCKED(infomask) \
268
+ (((infomask) & HEAP_LOCK_MASK) == HEAP_XMAX_KEYSHR_LOCK)
269
+
270
+ /* turn these all off when Xmax is to change */
271
+ #define HEAP_XMAX_BITS (HEAP_XMAX_COMMITTED | HEAP_XMAX_INVALID | \
272
+ HEAP_XMAX_IS_MULTI | HEAP_LOCK_MASK | HEAP_XMAX_LOCK_ONLY)
273
+
274
+ /*
275
+ * information stored in t_infomask2:
276
+ */
277
+ #define HEAP_NATTS_MASK 0x07FF /* 11 bits for number of attributes */
278
+ /* bits 0x1800 are available */
279
+ #define HEAP_KEYS_UPDATED 0x2000 /* tuple was updated and key cols
280
+ * modified, or tuple deleted */
281
+ #define HEAP_HOT_UPDATED 0x4000 /* tuple was HOT-updated */
282
+ #define HEAP_ONLY_TUPLE 0x8000 /* this is heap-only tuple */
283
+
284
+ #define HEAP2_XACT_MASK 0xE000 /* visibility-related bits */
285
+
286
+ /*
287
+ * HEAP_TUPLE_HAS_MATCH is a temporary flag used during hash joins. It is
288
+ * only used in tuples that are in the hash table, and those don't need
289
+ * any visibility information, so we can overlay it on a visibility flag
290
+ * instead of using up a dedicated bit.
291
+ */
292
+ #define HEAP_TUPLE_HAS_MATCH HEAP_ONLY_TUPLE /* tuple has a join match */
293
+
294
+ /*
295
+ * HeapTupleHeader accessor macros
296
+ *
297
+ * Note: beware of multiple evaluations of "tup" argument. But the Set
298
+ * macros evaluate their other argument only once.
299
+ */
300
+
301
+ /*
302
+ * HeapTupleHeaderGetRawXmin returns the "raw" xmin field, which is the xid
303
+ * originally used to insert the tuple. However, the tuple might actually
304
+ * be frozen (via HeapTupleHeaderSetXminFrozen) in which case the tuple's xmin
305
+ * is visible to every snapshot. Prior to PostgreSQL 9.4, we actually changed
306
+ * the xmin to FrozenTransactionId, and that value may still be encountered
307
+ * on disk.
308
+ */
309
+ #define HeapTupleHeaderGetRawXmin(tup) \
310
+ ( \
311
+ (tup)->t_choice.t_heap.t_xmin \
312
+ )
313
+
314
+ #define HeapTupleHeaderGetXmin(tup) \
315
+ ( \
316
+ HeapTupleHeaderXminFrozen(tup) ? \
317
+ FrozenTransactionId : HeapTupleHeaderGetRawXmin(tup) \
318
+ )
319
+
320
+ #define HeapTupleHeaderSetXmin(tup, xid) \
321
+ ( \
322
+ (tup)->t_choice.t_heap.t_xmin = (xid) \
323
+ )
324
+
325
+ #define HeapTupleHeaderXminCommitted(tup) \
326
+ ( \
327
+ ((tup)->t_infomask & HEAP_XMIN_COMMITTED) != 0 \
328
+ )
329
+
330
+ #define HeapTupleHeaderXminInvalid(tup) \
331
+ ( \
332
+ ((tup)->t_infomask & (HEAP_XMIN_COMMITTED|HEAP_XMIN_INVALID)) == \
333
+ HEAP_XMIN_INVALID \
334
+ )
335
+
336
+ #define HeapTupleHeaderXminFrozen(tup) \
337
+ ( \
338
+ ((tup)->t_infomask & (HEAP_XMIN_FROZEN)) == HEAP_XMIN_FROZEN \
339
+ )
340
+
341
+ #define HeapTupleHeaderSetXminCommitted(tup) \
342
+ ( \
343
+ AssertMacro(!HeapTupleHeaderXminInvalid(tup)), \
344
+ ((tup)->t_infomask |= HEAP_XMIN_COMMITTED) \
345
+ )
346
+
347
+ #define HeapTupleHeaderSetXminInvalid(tup) \
348
+ ( \
349
+ AssertMacro(!HeapTupleHeaderXminCommitted(tup)), \
350
+ ((tup)->t_infomask |= HEAP_XMIN_INVALID) \
351
+ )
352
+
353
+ #define HeapTupleHeaderSetXminFrozen(tup) \
354
+ ( \
355
+ AssertMacro(!HeapTupleHeaderXminInvalid(tup)), \
356
+ ((tup)->t_infomask |= HEAP_XMIN_FROZEN) \
357
+ )
358
+
359
+ /*
360
+ * HeapTupleHeaderGetRawXmax gets you the raw Xmax field. To find out the Xid
361
+ * that updated a tuple, you might need to resolve the MultiXactId if certain
362
+ * bits are set. HeapTupleHeaderGetUpdateXid checks those bits and takes care
363
+ * to resolve the MultiXactId if necessary. This might involve multixact I/O,
364
+ * so it should only be used if absolutely necessary.
365
+ */
366
+ #define HeapTupleHeaderGetUpdateXid(tup) \
367
+ ( \
368
+ (!((tup)->t_infomask & HEAP_XMAX_INVALID) && \
369
+ ((tup)->t_infomask & HEAP_XMAX_IS_MULTI) && \
370
+ !((tup)->t_infomask & HEAP_XMAX_LOCK_ONLY)) ? \
371
+ HeapTupleGetUpdateXid(tup) \
372
+ : \
373
+ HeapTupleHeaderGetRawXmax(tup) \
374
+ )
375
+
376
+ #define HeapTupleHeaderGetRawXmax(tup) \
377
+ ( \
378
+ (tup)->t_choice.t_heap.t_xmax \
379
+ )
380
+
381
+ #define HeapTupleHeaderSetXmax(tup, xid) \
382
+ ( \
383
+ (tup)->t_choice.t_heap.t_xmax = (xid) \
384
+ )
385
+
386
+ /*
387
+ * HeapTupleHeaderGetRawCommandId will give you what's in the header whether
388
+ * it is useful or not. Most code should use HeapTupleHeaderGetCmin or
389
+ * HeapTupleHeaderGetCmax instead, but note that those Assert that you can
390
+ * get a legitimate result, ie you are in the originating transaction!
391
+ */
392
+ #define HeapTupleHeaderGetRawCommandId(tup) \
393
+ ( \
394
+ (tup)->t_choice.t_heap.t_field3.t_cid \
395
+ )
396
+
397
+ /* SetCmin is reasonably simple since we never need a combo CID */
398
+ #define HeapTupleHeaderSetCmin(tup, cid) \
399
+ do { \
400
+ Assert(!((tup)->t_infomask & HEAP_MOVED)); \
401
+ (tup)->t_choice.t_heap.t_field3.t_cid = (cid); \
402
+ (tup)->t_infomask &= ~HEAP_COMBOCID; \
403
+ } while (0)
404
+
405
+ /* SetCmax must be used after HeapTupleHeaderAdjustCmax; see combocid.c */
406
+ #define HeapTupleHeaderSetCmax(tup, cid, iscombo) \
407
+ do { \
408
+ Assert(!((tup)->t_infomask & HEAP_MOVED)); \
409
+ (tup)->t_choice.t_heap.t_field3.t_cid = (cid); \
410
+ if (iscombo) \
411
+ (tup)->t_infomask |= HEAP_COMBOCID; \
412
+ else \
413
+ (tup)->t_infomask &= ~HEAP_COMBOCID; \
414
+ } while (0)
415
+
416
+ #define HeapTupleHeaderGetXvac(tup) \
417
+ ( \
418
+ ((tup)->t_infomask & HEAP_MOVED) ? \
419
+ (tup)->t_choice.t_heap.t_field3.t_xvac \
420
+ : \
421
+ InvalidTransactionId \
422
+ )
423
+
424
+ #define HeapTupleHeaderSetXvac(tup, xid) \
425
+ do { \
426
+ Assert((tup)->t_infomask & HEAP_MOVED); \
427
+ (tup)->t_choice.t_heap.t_field3.t_xvac = (xid); \
428
+ } while (0)
429
+
430
+ StaticAssertDecl(MaxOffsetNumber < SpecTokenOffsetNumber,
431
+ "invalid speculative token constant");
432
+
433
+ #define HeapTupleHeaderIsSpeculative(tup) \
434
+ ( \
435
+ (ItemPointerGetOffsetNumberNoCheck(&(tup)->t_ctid) == SpecTokenOffsetNumber) \
436
+ )
437
+
438
+ #define HeapTupleHeaderGetSpeculativeToken(tup) \
439
+ ( \
440
+ AssertMacro(HeapTupleHeaderIsSpeculative(tup)), \
441
+ ItemPointerGetBlockNumber(&(tup)->t_ctid) \
442
+ )
443
+
444
+ #define HeapTupleHeaderSetSpeculativeToken(tup, token) \
445
+ ( \
446
+ ItemPointerSet(&(tup)->t_ctid, token, SpecTokenOffsetNumber) \
447
+ )
448
+
449
+ #define HeapTupleHeaderIndicatesMovedPartitions(tup) \
450
+ ItemPointerIndicatesMovedPartitions(&(tup)->t_ctid)
451
+
452
+ #define HeapTupleHeaderSetMovedPartitions(tup) \
453
+ ItemPointerSetMovedPartitions(&(tup)->t_ctid)
454
+
455
+ #define HeapTupleHeaderGetDatumLength(tup) \
456
+ VARSIZE(tup)
457
+
458
+ #define HeapTupleHeaderSetDatumLength(tup, len) \
459
+ SET_VARSIZE(tup, len)
460
+
461
+ #define HeapTupleHeaderGetTypeId(tup) \
462
+ ( \
463
+ (tup)->t_choice.t_datum.datum_typeid \
464
+ )
465
+
466
+ #define HeapTupleHeaderSetTypeId(tup, typeid) \
467
+ ( \
468
+ (tup)->t_choice.t_datum.datum_typeid = (typeid) \
469
+ )
470
+
471
+ #define HeapTupleHeaderGetTypMod(tup) \
472
+ ( \
473
+ (tup)->t_choice.t_datum.datum_typmod \
474
+ )
475
+
476
+ #define HeapTupleHeaderSetTypMod(tup, typmod) \
477
+ ( \
478
+ (tup)->t_choice.t_datum.datum_typmod = (typmod) \
479
+ )
480
+
481
+ /*
482
+ * Note that we stop considering a tuple HOT-updated as soon as it is known
483
+ * aborted or the would-be updating transaction is known aborted. For best
484
+ * efficiency, check tuple visibility before using this macro, so that the
485
+ * INVALID bits will be as up to date as possible.
486
+ */
487
+ #define HeapTupleHeaderIsHotUpdated(tup) \
488
+ ( \
489
+ ((tup)->t_infomask2 & HEAP_HOT_UPDATED) != 0 && \
490
+ ((tup)->t_infomask & HEAP_XMAX_INVALID) == 0 && \
491
+ !HeapTupleHeaderXminInvalid(tup) \
492
+ )
493
+
494
+ #define HeapTupleHeaderSetHotUpdated(tup) \
495
+ ( \
496
+ (tup)->t_infomask2 |= HEAP_HOT_UPDATED \
497
+ )
498
+
499
+ #define HeapTupleHeaderClearHotUpdated(tup) \
500
+ ( \
501
+ (tup)->t_infomask2 &= ~HEAP_HOT_UPDATED \
502
+ )
503
+
504
+ #define HeapTupleHeaderIsHeapOnly(tup) \
505
+ ( \
506
+ ((tup)->t_infomask2 & HEAP_ONLY_TUPLE) != 0 \
507
+ )
508
+
509
+ #define HeapTupleHeaderSetHeapOnly(tup) \
510
+ ( \
511
+ (tup)->t_infomask2 |= HEAP_ONLY_TUPLE \
512
+ )
513
+
514
+ #define HeapTupleHeaderClearHeapOnly(tup) \
515
+ ( \
516
+ (tup)->t_infomask2 &= ~HEAP_ONLY_TUPLE \
517
+ )
518
+
519
+ #define HeapTupleHeaderHasMatch(tup) \
520
+ ( \
521
+ ((tup)->t_infomask2 & HEAP_TUPLE_HAS_MATCH) != 0 \
522
+ )
523
+
524
+ #define HeapTupleHeaderSetMatch(tup) \
525
+ ( \
526
+ (tup)->t_infomask2 |= HEAP_TUPLE_HAS_MATCH \
527
+ )
528
+
529
+ #define HeapTupleHeaderClearMatch(tup) \
530
+ ( \
531
+ (tup)->t_infomask2 &= ~HEAP_TUPLE_HAS_MATCH \
532
+ )
533
+
534
+ #define HeapTupleHeaderGetNatts(tup) \
535
+ ((tup)->t_infomask2 & HEAP_NATTS_MASK)
536
+
537
+ #define HeapTupleHeaderSetNatts(tup, natts) \
538
+ ( \
539
+ (tup)->t_infomask2 = ((tup)->t_infomask2 & ~HEAP_NATTS_MASK) | (natts) \
540
+ )
541
+
542
+ #define HeapTupleHeaderHasExternal(tup) \
543
+ (((tup)->t_infomask & HEAP_HASEXTERNAL) != 0)
544
+
545
+
546
+ /*
547
+ * BITMAPLEN(NATTS) -
548
+ * Computes size of null bitmap given number of data columns.
549
+ */
550
+ #define BITMAPLEN(NATTS) (((int)(NATTS) + 7) / 8)
551
+
552
+ /*
553
+ * MaxHeapTupleSize is the maximum allowed size of a heap tuple, including
554
+ * header and MAXALIGN alignment padding. Basically it's BLCKSZ minus the
555
+ * other stuff that has to be on a disk page. Since heap pages use no
556
+ * "special space", there's no deduction for that.
557
+ *
558
+ * NOTE: we allow for the ItemId that must point to the tuple, ensuring that
559
+ * an otherwise-empty page can indeed hold a tuple of this size. Because
560
+ * ItemIds and tuples have different alignment requirements, don't assume that
561
+ * you can, say, fit 2 tuples of size MaxHeapTupleSize/2 on the same page.
562
+ */
563
+ #define MaxHeapTupleSize (BLCKSZ - MAXALIGN(SizeOfPageHeaderData + sizeof(ItemIdData)))
564
+ #define MinHeapTupleSize MAXALIGN(SizeofHeapTupleHeader)
565
+
566
+ /*
567
+ * MaxHeapTuplesPerPage is an upper bound on the number of tuples that can
568
+ * fit on one heap page. (Note that indexes could have more, because they
569
+ * use a smaller tuple header.) We arrive at the divisor because each tuple
570
+ * must be maxaligned, and it must have an associated line pointer.
571
+ *
572
+ * Note: with HOT, there could theoretically be more line pointers (not actual
573
+ * tuples) than this on a heap page. However we constrain the number of line
574
+ * pointers to this anyway, to avoid excessive line-pointer bloat and not
575
+ * require increases in the size of work arrays.
576
+ */
577
+ #define MaxHeapTuplesPerPage \
578
+ ((int) ((BLCKSZ - SizeOfPageHeaderData) / \
579
+ (MAXALIGN(SizeofHeapTupleHeader) + sizeof(ItemIdData))))
580
+
581
+ /*
582
+ * MaxAttrSize is a somewhat arbitrary upper limit on the declared size of
583
+ * data fields of char(n) and similar types. It need not have anything
584
+ * directly to do with the *actual* upper limit of varlena values, which
585
+ * is currently 1Gb (see TOAST structures in postgres.h). I've set it
586
+ * at 10Mb which seems like a reasonable number --- tgl 8/6/00.
587
+ */
588
+ #define MaxAttrSize (10 * 1024 * 1024)
589
+
590
+
591
+ /*
592
+ * MinimalTuple is an alternative representation that is used for transient
593
+ * tuples inside the executor, in places where transaction status information
594
+ * is not required, the tuple rowtype is known, and shaving off a few bytes
595
+ * is worthwhile because we need to store many tuples. The representation
596
+ * is chosen so that tuple access routines can work with either full or
597
+ * minimal tuples via a HeapTupleData pointer structure. The access routines
598
+ * see no difference, except that they must not access the transaction status
599
+ * or t_ctid fields because those aren't there.
600
+ *
601
+ * For the most part, MinimalTuples should be accessed via TupleTableSlot
602
+ * routines. These routines will prevent access to the "system columns"
603
+ * and thereby prevent accidental use of the nonexistent fields.
604
+ *
605
+ * MinimalTupleData contains a length word, some padding, and fields matching
606
+ * HeapTupleHeaderData beginning with t_infomask2. The padding is chosen so
607
+ * that offsetof(t_infomask2) is the same modulo MAXIMUM_ALIGNOF in both
608
+ * structs. This makes data alignment rules equivalent in both cases.
609
+ *
610
+ * When a minimal tuple is accessed via a HeapTupleData pointer, t_data is
611
+ * set to point MINIMAL_TUPLE_OFFSET bytes before the actual start of the
612
+ * minimal tuple --- that is, where a full tuple matching the minimal tuple's
613
+ * data would start. This trick is what makes the structs seem equivalent.
614
+ *
615
+ * Note that t_hoff is computed the same as in a full tuple, hence it includes
616
+ * the MINIMAL_TUPLE_OFFSET distance. t_len does not include that, however.
617
+ *
618
+ * MINIMAL_TUPLE_DATA_OFFSET is the offset to the first useful (non-pad) data
619
+ * other than the length word. tuplesort.c and tuplestore.c use this to avoid
620
+ * writing the padding to disk.
621
+ */
622
+ #define MINIMAL_TUPLE_OFFSET \
623
+ ((offsetof(HeapTupleHeaderData, t_infomask2) - sizeof(uint32)) / MAXIMUM_ALIGNOF * MAXIMUM_ALIGNOF)
624
+ #define MINIMAL_TUPLE_PADDING \
625
+ ((offsetof(HeapTupleHeaderData, t_infomask2) - sizeof(uint32)) % MAXIMUM_ALIGNOF)
626
+ #define MINIMAL_TUPLE_DATA_OFFSET \
627
+ offsetof(MinimalTupleData, t_infomask2)
628
+
629
+ struct MinimalTupleData
630
+ {
631
+ uint32 t_len; /* actual length of minimal tuple */
632
+
633
+ char mt_padding[MINIMAL_TUPLE_PADDING];
634
+
635
+ /* Fields below here must match HeapTupleHeaderData! */
636
+
637
+ uint16 t_infomask2; /* number of attributes + various flags */
638
+
639
+ uint16 t_infomask; /* various flag bits, see below */
640
+
641
+ uint8 t_hoff; /* sizeof header incl. bitmap, padding */
642
+
643
+ /* ^ - 23 bytes - ^ */
644
+
645
+ bits8 t_bits[FLEXIBLE_ARRAY_MEMBER]; /* bitmap of NULLs */
646
+
647
+ /* MORE DATA FOLLOWS AT END OF STRUCT */
648
+ };
649
+
650
+ /* typedef appears in htup.h */
651
+
652
+ #define SizeofMinimalTupleHeader offsetof(MinimalTupleData, t_bits)
653
+
654
+
655
+ /*
656
+ * GETSTRUCT - given a HeapTuple pointer, return address of the user data
657
+ */
658
+ #define GETSTRUCT(TUP) ((char *) ((TUP)->t_data) + (TUP)->t_data->t_hoff)
659
+
660
+ /*
661
+ * Accessor macros to be used with HeapTuple pointers.
662
+ */
663
+
664
+ #define HeapTupleHasNulls(tuple) \
665
+ (((tuple)->t_data->t_infomask & HEAP_HASNULL) != 0)
666
+
667
+ #define HeapTupleNoNulls(tuple) \
668
+ (!((tuple)->t_data->t_infomask & HEAP_HASNULL))
669
+
670
+ #define HeapTupleHasVarWidth(tuple) \
671
+ (((tuple)->t_data->t_infomask & HEAP_HASVARWIDTH) != 0)
672
+
673
+ #define HeapTupleAllFixed(tuple) \
674
+ (!((tuple)->t_data->t_infomask & HEAP_HASVARWIDTH))
675
+
676
+ #define HeapTupleHasExternal(tuple) \
677
+ (((tuple)->t_data->t_infomask & HEAP_HASEXTERNAL) != 0)
678
+
679
+ #define HeapTupleIsHotUpdated(tuple) \
680
+ HeapTupleHeaderIsHotUpdated((tuple)->t_data)
681
+
682
+ #define HeapTupleSetHotUpdated(tuple) \
683
+ HeapTupleHeaderSetHotUpdated((tuple)->t_data)
684
+
685
+ #define HeapTupleClearHotUpdated(tuple) \
686
+ HeapTupleHeaderClearHotUpdated((tuple)->t_data)
687
+
688
+ #define HeapTupleIsHeapOnly(tuple) \
689
+ HeapTupleHeaderIsHeapOnly((tuple)->t_data)
690
+
691
+ #define HeapTupleSetHeapOnly(tuple) \
692
+ HeapTupleHeaderSetHeapOnly((tuple)->t_data)
693
+
694
+ #define HeapTupleClearHeapOnly(tuple) \
695
+ HeapTupleHeaderClearHeapOnly((tuple)->t_data)
696
+
697
+ /* prototypes for functions in common/heaptuple.c */
698
+ extern Size heap_compute_data_size(TupleDesc tupleDesc,
699
+ const Datum *values, const bool *isnull);
700
+ extern void heap_fill_tuple(TupleDesc tupleDesc,
701
+ const Datum *values, const bool *isnull,
702
+ char *data, Size data_size,
703
+ uint16 *infomask, bits8 *bit);
704
+ extern bool heap_attisnull(HeapTuple tup, int attnum, TupleDesc tupleDesc);
705
+ extern Datum nocachegetattr(HeapTuple tup, int attnum,
706
+ TupleDesc tupleDesc);
707
+ extern Datum heap_getsysattr(HeapTuple tup, int attnum, TupleDesc tupleDesc,
708
+ bool *isnull);
709
+ extern Datum getmissingattr(TupleDesc tupleDesc,
710
+ int attnum, bool *isnull);
711
+ extern HeapTuple heap_copytuple(HeapTuple tuple);
712
+ extern void heap_copytuple_with_tuple(HeapTuple src, HeapTuple dest);
713
+ extern Datum heap_copy_tuple_as_datum(HeapTuple tuple, TupleDesc tupleDesc);
714
+ extern HeapTuple heap_form_tuple(TupleDesc tupleDescriptor,
715
+ const Datum *values, const bool *isnull);
716
+ extern HeapTuple heap_modify_tuple(HeapTuple tuple,
717
+ TupleDesc tupleDesc,
718
+ const Datum *replValues,
719
+ const bool *replIsnull,
720
+ const bool *doReplace);
721
+ extern HeapTuple heap_modify_tuple_by_cols(HeapTuple tuple,
722
+ TupleDesc tupleDesc,
723
+ int nCols,
724
+ const int *replCols,
725
+ const Datum *replValues,
726
+ const bool *replIsnull);
727
+ extern void heap_deform_tuple(HeapTuple tuple, TupleDesc tupleDesc,
728
+ Datum *values, bool *isnull);
729
+ extern void heap_freetuple(HeapTuple htup);
730
+ extern MinimalTuple heap_form_minimal_tuple(TupleDesc tupleDescriptor,
731
+ const Datum *values, const bool *isnull);
732
+ extern void heap_free_minimal_tuple(MinimalTuple mtup);
733
+ extern MinimalTuple heap_copy_minimal_tuple(MinimalTuple mtup);
734
+ extern HeapTuple heap_tuple_from_minimal_tuple(MinimalTuple mtup);
735
+ extern MinimalTuple minimal_tuple_from_heap_tuple(HeapTuple htup);
736
+ extern size_t varsize_any(void *p);
737
+ extern HeapTuple heap_expand_tuple(HeapTuple sourceTuple, TupleDesc tupleDesc);
738
+ extern MinimalTuple minimal_expand_tuple(HeapTuple sourceTuple, TupleDesc tupleDesc);
739
+
740
+ #ifndef FRONTEND
741
+ /*
742
+ * fastgetattr
743
+ * Fetch a user attribute's value as a Datum (might be either a
744
+ * value, or a pointer into the data area of the tuple).
745
+ *
746
+ * This must not be used when a system attribute might be requested.
747
+ * Furthermore, the passed attnum MUST be valid. Use heap_getattr()
748
+ * instead, if in doubt.
749
+ *
750
+ * This gets called many times, so we macro the cacheable and NULL
751
+ * lookups, and call nocachegetattr() for the rest.
752
+ */
753
+ static inline Datum
754
+ fastgetattr(HeapTuple tup, int attnum, TupleDesc tupleDesc, bool *isnull)
755
+ {
756
+ Assert(attnum > 0);
757
+
758
+ *isnull = false;
759
+ if (HeapTupleNoNulls(tup))
760
+ {
761
+ Form_pg_attribute att;
762
+
763
+ att = TupleDescAttr(tupleDesc, attnum - 1);
764
+ if (att->attcacheoff >= 0)
765
+ return fetchatt(att, (char *) tup->t_data + tup->t_data->t_hoff +
766
+ att->attcacheoff);
767
+ else
768
+ return nocachegetattr(tup, attnum, tupleDesc);
769
+ }
770
+ else
771
+ {
772
+ if (att_isnull(attnum - 1, tup->t_data->t_bits))
773
+ {
774
+ *isnull = true;
775
+ return (Datum) NULL;
776
+ }
777
+ else
778
+ return nocachegetattr(tup, attnum, tupleDesc);
779
+ }
780
+ }
781
+
782
+ /*
783
+ * heap_getattr
784
+ * Extract an attribute of a heap tuple and return it as a Datum.
785
+ * This works for either system or user attributes. The given attnum
786
+ * is properly range-checked.
787
+ *
788
+ * If the field in question has a NULL value, we return a zero Datum
789
+ * and set *isnull == true. Otherwise, we set *isnull == false.
790
+ *
791
+ * <tup> is the pointer to the heap tuple. <attnum> is the attribute
792
+ * number of the column (field) caller wants. <tupleDesc> is a
793
+ * pointer to the structure describing the row and all its fields.
794
+ *
795
+ */
796
+ static inline Datum
797
+ heap_getattr(HeapTuple tup, int attnum, TupleDesc tupleDesc, bool *isnull)
798
+ {
799
+ if (attnum > 0)
800
+ {
801
+ if (attnum > (int) HeapTupleHeaderGetNatts(tup->t_data))
802
+ return getmissingattr(tupleDesc, attnum, isnull);
803
+ else
804
+ return fastgetattr(tup, attnum, tupleDesc, isnull);
805
+ }
806
+ else
807
+ return heap_getsysattr(tup, attnum, tupleDesc, isnull);
808
+ }
809
+ #endif /* FRONTEND */
810
+
811
+ #endif /* HTUP_DETAILS_H */