gitlab-pg_query 1.3.1 → 2.0.4

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 (480) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +217 -99
  3. data/README.md +92 -69
  4. data/Rakefile +85 -5
  5. data/ext/pg_query/extconf.rb +3 -40
  6. data/ext/pg_query/guc-file.c +0 -0
  7. data/ext/pg_query/include/access/amapi.h +246 -0
  8. data/ext/pg_query/include/access/attmap.h +52 -0
  9. data/ext/pg_query/include/access/attnum.h +64 -0
  10. data/ext/pg_query/include/access/clog.h +61 -0
  11. data/ext/pg_query/include/access/commit_ts.h +77 -0
  12. data/ext/pg_query/include/access/detoast.h +92 -0
  13. data/ext/pg_query/include/access/genam.h +228 -0
  14. data/ext/pg_query/include/access/gin.h +78 -0
  15. data/ext/pg_query/include/access/htup.h +89 -0
  16. data/ext/pg_query/include/access/htup_details.h +819 -0
  17. data/ext/pg_query/include/access/itup.h +161 -0
  18. data/ext/pg_query/include/access/parallel.h +82 -0
  19. data/ext/pg_query/include/access/printtup.h +35 -0
  20. data/ext/pg_query/include/access/relation.h +28 -0
  21. data/ext/pg_query/include/access/relscan.h +176 -0
  22. data/ext/pg_query/include/access/rmgr.h +35 -0
  23. data/ext/pg_query/include/access/rmgrlist.h +49 -0
  24. data/ext/pg_query/include/access/sdir.h +58 -0
  25. data/ext/pg_query/include/access/skey.h +151 -0
  26. data/ext/pg_query/include/access/stratnum.h +83 -0
  27. data/ext/pg_query/include/access/sysattr.h +29 -0
  28. data/ext/pg_query/include/access/table.h +27 -0
  29. data/ext/pg_query/include/access/tableam.h +1825 -0
  30. data/ext/pg_query/include/access/transam.h +265 -0
  31. data/ext/pg_query/include/access/tupconvert.h +51 -0
  32. data/ext/pg_query/include/access/tupdesc.h +154 -0
  33. data/ext/pg_query/include/access/tupmacs.h +247 -0
  34. data/ext/pg_query/include/access/twophase.h +61 -0
  35. data/ext/pg_query/include/access/xact.h +463 -0
  36. data/ext/pg_query/include/access/xlog.h +398 -0
  37. data/ext/pg_query/include/access/xlog_internal.h +330 -0
  38. data/ext/pg_query/include/access/xlogdefs.h +109 -0
  39. data/ext/pg_query/include/access/xloginsert.h +64 -0
  40. data/ext/pg_query/include/access/xlogreader.h +327 -0
  41. data/ext/pg_query/include/access/xlogrecord.h +227 -0
  42. data/ext/pg_query/include/bootstrap/bootstrap.h +62 -0
  43. data/ext/pg_query/include/c.h +1322 -0
  44. data/ext/pg_query/include/catalog/catalog.h +42 -0
  45. data/ext/pg_query/include/catalog/catversion.h +58 -0
  46. data/ext/pg_query/include/catalog/dependency.h +275 -0
  47. data/ext/pg_query/include/catalog/genbki.h +64 -0
  48. data/ext/pg_query/include/catalog/index.h +199 -0
  49. data/ext/pg_query/include/catalog/indexing.h +366 -0
  50. data/ext/pg_query/include/catalog/namespace.h +188 -0
  51. data/ext/pg_query/include/catalog/objectaccess.h +197 -0
  52. data/ext/pg_query/include/catalog/objectaddress.h +84 -0
  53. data/ext/pg_query/include/catalog/pg_aggregate.h +176 -0
  54. data/ext/pg_query/include/catalog/pg_aggregate_d.h +77 -0
  55. data/ext/pg_query/include/catalog/pg_am.h +60 -0
  56. data/ext/pg_query/include/catalog/pg_am_d.h +45 -0
  57. data/ext/pg_query/include/catalog/pg_attribute.h +204 -0
  58. data/ext/pg_query/include/catalog/pg_attribute_d.h +59 -0
  59. data/ext/pg_query/include/catalog/pg_authid.h +58 -0
  60. data/ext/pg_query/include/catalog/pg_authid_d.h +49 -0
  61. data/ext/pg_query/include/catalog/pg_class.h +200 -0
  62. data/ext/pg_query/include/catalog/pg_class_d.h +103 -0
  63. data/ext/pg_query/include/catalog/pg_collation.h +73 -0
  64. data/ext/pg_query/include/catalog/pg_collation_d.h +45 -0
  65. data/ext/pg_query/include/catalog/pg_constraint.h +247 -0
  66. data/ext/pg_query/include/catalog/pg_constraint_d.h +67 -0
  67. data/ext/pg_query/include/catalog/pg_control.h +250 -0
  68. data/ext/pg_query/include/catalog/pg_conversion.h +72 -0
  69. data/ext/pg_query/include/catalog/pg_conversion_d.h +35 -0
  70. data/ext/pg_query/include/catalog/pg_depend.h +73 -0
  71. data/ext/pg_query/include/catalog/pg_depend_d.h +34 -0
  72. data/ext/pg_query/include/catalog/pg_event_trigger.h +51 -0
  73. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +34 -0
  74. data/ext/pg_query/include/catalog/pg_index.h +80 -0
  75. data/ext/pg_query/include/catalog/pg_index_d.h +56 -0
  76. data/ext/pg_query/include/catalog/pg_language.h +67 -0
  77. data/ext/pg_query/include/catalog/pg_language_d.h +39 -0
  78. data/ext/pg_query/include/catalog/pg_namespace.h +59 -0
  79. data/ext/pg_query/include/catalog/pg_namespace_d.h +34 -0
  80. data/ext/pg_query/include/catalog/pg_opclass.h +85 -0
  81. data/ext/pg_query/include/catalog/pg_opclass_d.h +49 -0
  82. data/ext/pg_query/include/catalog/pg_operator.h +102 -0
  83. data/ext/pg_query/include/catalog/pg_operator_d.h +106 -0
  84. data/ext/pg_query/include/catalog/pg_opfamily.h +60 -0
  85. data/ext/pg_query/include/catalog/pg_opfamily_d.h +47 -0
  86. data/ext/pg_query/include/catalog/pg_partitioned_table.h +63 -0
  87. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +35 -0
  88. data/ext/pg_query/include/catalog/pg_proc.h +211 -0
  89. data/ext/pg_query/include/catalog/pg_proc_d.h +99 -0
  90. data/ext/pg_query/include/catalog/pg_publication.h +115 -0
  91. data/ext/pg_query/include/catalog/pg_publication_d.h +36 -0
  92. data/ext/pg_query/include/catalog/pg_replication_origin.h +57 -0
  93. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +29 -0
  94. data/ext/pg_query/include/catalog/pg_statistic.h +275 -0
  95. data/ext/pg_query/include/catalog/pg_statistic_d.h +194 -0
  96. data/ext/pg_query/include/catalog/pg_statistic_ext.h +74 -0
  97. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +40 -0
  98. data/ext/pg_query/include/catalog/pg_transform.h +45 -0
  99. data/ext/pg_query/include/catalog/pg_transform_d.h +32 -0
  100. data/ext/pg_query/include/catalog/pg_trigger.h +137 -0
  101. data/ext/pg_query/include/catalog/pg_trigger_d.h +106 -0
  102. data/ext/pg_query/include/catalog/pg_ts_config.h +50 -0
  103. data/ext/pg_query/include/catalog/pg_ts_config_d.h +32 -0
  104. data/ext/pg_query/include/catalog/pg_ts_dict.h +54 -0
  105. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +33 -0
  106. data/ext/pg_query/include/catalog/pg_ts_parser.h +57 -0
  107. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +35 -0
  108. data/ext/pg_query/include/catalog/pg_ts_template.h +48 -0
  109. data/ext/pg_query/include/catalog/pg_ts_template_d.h +32 -0
  110. data/ext/pg_query/include/catalog/pg_type.h +372 -0
  111. data/ext/pg_query/include/catalog/pg_type_d.h +285 -0
  112. data/ext/pg_query/include/catalog/storage.h +48 -0
  113. data/ext/pg_query/include/commands/async.h +54 -0
  114. data/ext/pg_query/include/commands/dbcommands.h +35 -0
  115. data/ext/pg_query/include/commands/defrem.h +173 -0
  116. data/ext/pg_query/include/commands/event_trigger.h +88 -0
  117. data/ext/pg_query/include/commands/explain.h +127 -0
  118. data/ext/pg_query/include/commands/prepare.h +61 -0
  119. data/ext/pg_query/include/commands/tablespace.h +67 -0
  120. data/ext/pg_query/include/commands/trigger.h +277 -0
  121. data/ext/pg_query/include/commands/user.h +37 -0
  122. data/ext/pg_query/include/commands/vacuum.h +293 -0
  123. data/ext/pg_query/include/commands/variable.h +38 -0
  124. data/ext/pg_query/include/common/file_perm.h +56 -0
  125. data/ext/pg_query/include/common/hashfn.h +104 -0
  126. data/ext/pg_query/include/common/ip.h +37 -0
  127. data/ext/pg_query/include/common/keywords.h +33 -0
  128. data/ext/pg_query/include/common/kwlookup.h +44 -0
  129. data/ext/pg_query/include/common/relpath.h +90 -0
  130. data/ext/pg_query/include/common/string.h +19 -0
  131. data/ext/pg_query/include/common/unicode_combining_table.h +196 -0
  132. data/ext/pg_query/include/datatype/timestamp.h +197 -0
  133. data/ext/pg_query/include/executor/execdesc.h +70 -0
  134. data/ext/pg_query/include/executor/executor.h +614 -0
  135. data/ext/pg_query/include/executor/functions.h +41 -0
  136. data/ext/pg_query/include/executor/instrument.h +101 -0
  137. data/ext/pg_query/include/executor/spi.h +175 -0
  138. data/ext/pg_query/include/executor/tablefunc.h +67 -0
  139. data/ext/pg_query/include/executor/tuptable.h +487 -0
  140. data/ext/pg_query/include/fmgr.h +775 -0
  141. data/ext/pg_query/include/funcapi.h +348 -0
  142. data/ext/pg_query/include/getaddrinfo.h +162 -0
  143. data/ext/pg_query/include/jit/jit.h +105 -0
  144. data/ext/pg_query/include/kwlist_d.h +1072 -0
  145. data/ext/pg_query/include/lib/ilist.h +727 -0
  146. data/ext/pg_query/include/lib/pairingheap.h +102 -0
  147. data/ext/pg_query/include/lib/simplehash.h +1059 -0
  148. data/ext/pg_query/include/lib/stringinfo.h +161 -0
  149. data/ext/pg_query/include/libpq/auth.h +29 -0
  150. data/ext/pg_query/include/libpq/crypt.h +46 -0
  151. data/ext/pg_query/include/libpq/hba.h +140 -0
  152. data/ext/pg_query/include/libpq/libpq-be.h +326 -0
  153. data/ext/pg_query/include/libpq/libpq.h +133 -0
  154. data/ext/pg_query/include/libpq/pqcomm.h +208 -0
  155. data/ext/pg_query/include/libpq/pqformat.h +210 -0
  156. data/ext/pg_query/include/libpq/pqsignal.h +42 -0
  157. data/ext/pg_query/include/mb/pg_wchar.h +672 -0
  158. data/ext/pg_query/include/mb/stringinfo_mb.h +24 -0
  159. data/ext/pg_query/include/miscadmin.h +476 -0
  160. data/ext/pg_query/include/nodes/bitmapset.h +122 -0
  161. data/ext/pg_query/include/nodes/execnodes.h +2520 -0
  162. data/ext/pg_query/include/nodes/extensible.h +160 -0
  163. data/ext/pg_query/include/nodes/lockoptions.h +61 -0
  164. data/ext/pg_query/include/nodes/makefuncs.h +108 -0
  165. data/ext/pg_query/include/nodes/memnodes.h +108 -0
  166. data/ext/pg_query/include/nodes/nodeFuncs.h +162 -0
  167. data/ext/pg_query/include/nodes/nodes.h +842 -0
  168. data/ext/pg_query/include/nodes/params.h +170 -0
  169. data/ext/pg_query/include/nodes/parsenodes.h +3579 -0
  170. data/ext/pg_query/include/nodes/pathnodes.h +2556 -0
  171. data/ext/pg_query/include/nodes/pg_list.h +605 -0
  172. data/ext/pg_query/include/nodes/plannodes.h +1251 -0
  173. data/ext/pg_query/include/nodes/primnodes.h +1541 -0
  174. data/ext/pg_query/include/nodes/print.h +34 -0
  175. data/ext/pg_query/include/nodes/tidbitmap.h +75 -0
  176. data/ext/pg_query/include/nodes/value.h +61 -0
  177. data/ext/pg_query/include/optimizer/cost.h +206 -0
  178. data/ext/pg_query/include/optimizer/geqo.h +88 -0
  179. data/ext/pg_query/include/optimizer/geqo_gene.h +45 -0
  180. data/ext/pg_query/include/optimizer/optimizer.h +199 -0
  181. data/ext/pg_query/include/optimizer/paths.h +249 -0
  182. data/ext/pg_query/include/optimizer/planmain.h +119 -0
  183. data/ext/pg_query/include/parser/analyze.h +49 -0
  184. data/ext/pg_query/include/parser/gram.h +1067 -0
  185. data/ext/pg_query/include/parser/gramparse.h +75 -0
  186. data/ext/pg_query/include/parser/kwlist.h +477 -0
  187. data/ext/pg_query/include/parser/parse_agg.h +68 -0
  188. data/ext/pg_query/include/parser/parse_clause.h +54 -0
  189. data/ext/pg_query/include/parser/parse_coerce.h +97 -0
  190. data/ext/pg_query/include/parser/parse_collate.h +27 -0
  191. data/ext/pg_query/include/parser/parse_expr.h +26 -0
  192. data/ext/pg_query/include/parser/parse_func.h +73 -0
  193. data/ext/pg_query/include/parser/parse_node.h +327 -0
  194. data/ext/pg_query/include/parser/parse_oper.h +67 -0
  195. data/ext/pg_query/include/parser/parse_relation.h +123 -0
  196. data/ext/pg_query/include/parser/parse_target.h +46 -0
  197. data/ext/pg_query/include/parser/parse_type.h +60 -0
  198. data/ext/pg_query/include/parser/parser.h +41 -0
  199. data/ext/pg_query/include/parser/parsetree.h +61 -0
  200. data/ext/pg_query/include/parser/scanner.h +152 -0
  201. data/ext/pg_query/include/parser/scansup.h +30 -0
  202. data/ext/pg_query/include/partitioning/partdefs.h +26 -0
  203. data/ext/pg_query/include/pg_config.h +989 -0
  204. data/ext/pg_query/include/pg_config_ext.h +8 -0
  205. data/ext/pg_query/include/pg_config_manual.h +350 -0
  206. data/ext/pg_query/include/pg_config_os.h +8 -0
  207. data/ext/pg_query/include/pg_getopt.h +56 -0
  208. data/ext/pg_query/include/pg_query.h +121 -0
  209. data/ext/pg_query/include/pg_query_enum_defs.c +2454 -0
  210. data/ext/pg_query/include/pg_query_fingerprint_conds.c +875 -0
  211. data/ext/pg_query/include/pg_query_fingerprint_defs.c +12413 -0
  212. data/ext/pg_query/include/pg_query_json_helper.c +61 -0
  213. data/ext/pg_query/include/pg_query_outfuncs_conds.c +686 -0
  214. data/ext/pg_query/include/pg_query_outfuncs_defs.c +2437 -0
  215. data/ext/pg_query/include/pg_query_readfuncs_conds.c +222 -0
  216. data/ext/pg_query/include/pg_query_readfuncs_defs.c +2878 -0
  217. data/ext/pg_query/include/pg_trace.h +17 -0
  218. data/ext/pg_query/include/pgstat.h +1487 -0
  219. data/ext/pg_query/include/pgtime.h +84 -0
  220. data/ext/pg_query/include/pl_gram.h +385 -0
  221. data/ext/pg_query/include/pl_reserved_kwlist.h +52 -0
  222. data/ext/pg_query/include/pl_reserved_kwlist_d.h +114 -0
  223. data/ext/pg_query/include/pl_unreserved_kwlist.h +112 -0
  224. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +246 -0
  225. data/ext/pg_query/include/plerrcodes.h +990 -0
  226. data/ext/pg_query/include/plpgsql.h +1347 -0
  227. data/ext/pg_query/include/port.h +524 -0
  228. data/ext/pg_query/include/port/atomics.h +524 -0
  229. data/ext/pg_query/include/port/atomics/arch-arm.h +26 -0
  230. data/ext/pg_query/include/port/atomics/arch-ppc.h +254 -0
  231. data/ext/pg_query/include/port/atomics/arch-x86.h +252 -0
  232. data/ext/pg_query/include/port/atomics/fallback.h +170 -0
  233. data/ext/pg_query/include/port/atomics/generic-gcc.h +286 -0
  234. data/ext/pg_query/include/port/atomics/generic.h +401 -0
  235. data/ext/pg_query/include/port/pg_bitutils.h +226 -0
  236. data/ext/pg_query/include/port/pg_bswap.h +161 -0
  237. data/ext/pg_query/include/port/pg_crc32c.h +101 -0
  238. data/ext/pg_query/include/portability/instr_time.h +256 -0
  239. data/ext/pg_query/include/postgres.h +764 -0
  240. data/ext/pg_query/include/postgres_ext.h +74 -0
  241. data/ext/pg_query/include/postmaster/autovacuum.h +83 -0
  242. data/ext/pg_query/include/postmaster/bgworker.h +161 -0
  243. data/ext/pg_query/include/postmaster/bgworker_internals.h +64 -0
  244. data/ext/pg_query/include/postmaster/bgwriter.h +45 -0
  245. data/ext/pg_query/include/postmaster/fork_process.h +17 -0
  246. data/ext/pg_query/include/postmaster/interrupt.h +32 -0
  247. data/ext/pg_query/include/postmaster/pgarch.h +39 -0
  248. data/ext/pg_query/include/postmaster/postmaster.h +77 -0
  249. data/ext/pg_query/include/postmaster/syslogger.h +98 -0
  250. data/ext/pg_query/include/postmaster/walwriter.h +21 -0
  251. data/ext/pg_query/include/protobuf-c.h +1106 -0
  252. data/ext/pg_query/include/protobuf-c/protobuf-c.h +1106 -0
  253. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +10846 -0
  254. data/ext/pg_query/include/protobuf/pg_query.pb.h +124718 -0
  255. data/ext/pg_query/include/regex/regex.h +184 -0
  256. data/ext/pg_query/include/replication/logicallauncher.h +31 -0
  257. data/ext/pg_query/include/replication/logicalproto.h +110 -0
  258. data/ext/pg_query/include/replication/logicalworker.h +19 -0
  259. data/ext/pg_query/include/replication/origin.h +73 -0
  260. data/ext/pg_query/include/replication/reorderbuffer.h +467 -0
  261. data/ext/pg_query/include/replication/slot.h +219 -0
  262. data/ext/pg_query/include/replication/syncrep.h +115 -0
  263. data/ext/pg_query/include/replication/walreceiver.h +340 -0
  264. data/ext/pg_query/include/replication/walsender.h +74 -0
  265. data/ext/pg_query/include/rewrite/prs2lock.h +46 -0
  266. data/ext/pg_query/include/rewrite/rewriteHandler.h +40 -0
  267. data/ext/pg_query/include/rewrite/rewriteManip.h +87 -0
  268. data/ext/pg_query/include/rewrite/rewriteSupport.h +26 -0
  269. data/ext/pg_query/include/storage/backendid.h +37 -0
  270. data/ext/pg_query/include/storage/block.h +121 -0
  271. data/ext/pg_query/include/storage/buf.h +46 -0
  272. data/ext/pg_query/include/storage/bufmgr.h +292 -0
  273. data/ext/pg_query/include/storage/bufpage.h +459 -0
  274. data/ext/pg_query/include/storage/condition_variable.h +62 -0
  275. data/ext/pg_query/include/storage/dsm.h +61 -0
  276. data/ext/pg_query/include/storage/dsm_impl.h +75 -0
  277. data/ext/pg_query/include/storage/fd.h +168 -0
  278. data/ext/pg_query/include/storage/ipc.h +81 -0
  279. data/ext/pg_query/include/storage/item.h +19 -0
  280. data/ext/pg_query/include/storage/itemid.h +184 -0
  281. data/ext/pg_query/include/storage/itemptr.h +206 -0
  282. data/ext/pg_query/include/storage/large_object.h +100 -0
  283. data/ext/pg_query/include/storage/latch.h +190 -0
  284. data/ext/pg_query/include/storage/lmgr.h +114 -0
  285. data/ext/pg_query/include/storage/lock.h +612 -0
  286. data/ext/pg_query/include/storage/lockdefs.h +59 -0
  287. data/ext/pg_query/include/storage/lwlock.h +232 -0
  288. data/ext/pg_query/include/storage/lwlocknames.h +51 -0
  289. data/ext/pg_query/include/storage/off.h +57 -0
  290. data/ext/pg_query/include/storage/pg_sema.h +61 -0
  291. data/ext/pg_query/include/storage/pg_shmem.h +90 -0
  292. data/ext/pg_query/include/storage/pmsignal.h +94 -0
  293. data/ext/pg_query/include/storage/predicate.h +87 -0
  294. data/ext/pg_query/include/storage/proc.h +333 -0
  295. data/ext/pg_query/include/storage/proclist_types.h +51 -0
  296. data/ext/pg_query/include/storage/procsignal.h +75 -0
  297. data/ext/pg_query/include/storage/relfilenode.h +99 -0
  298. data/ext/pg_query/include/storage/s_lock.h +1047 -0
  299. data/ext/pg_query/include/storage/sharedfileset.h +45 -0
  300. data/ext/pg_query/include/storage/shm_mq.h +85 -0
  301. data/ext/pg_query/include/storage/shm_toc.h +58 -0
  302. data/ext/pg_query/include/storage/shmem.h +81 -0
  303. data/ext/pg_query/include/storage/sinval.h +153 -0
  304. data/ext/pg_query/include/storage/sinvaladt.h +43 -0
  305. data/ext/pg_query/include/storage/smgr.h +109 -0
  306. data/ext/pg_query/include/storage/spin.h +77 -0
  307. data/ext/pg_query/include/storage/standby.h +91 -0
  308. data/ext/pg_query/include/storage/standbydefs.h +74 -0
  309. data/ext/pg_query/include/storage/sync.h +62 -0
  310. data/ext/pg_query/include/tcop/cmdtag.h +58 -0
  311. data/ext/pg_query/include/tcop/cmdtaglist.h +217 -0
  312. data/ext/pg_query/include/tcop/deparse_utility.h +108 -0
  313. data/ext/pg_query/include/tcop/dest.h +149 -0
  314. data/ext/pg_query/include/tcop/fastpath.h +21 -0
  315. data/ext/pg_query/include/tcop/pquery.h +45 -0
  316. data/ext/pg_query/include/tcop/tcopprot.h +89 -0
  317. data/ext/pg_query/include/tcop/utility.h +108 -0
  318. data/ext/pg_query/include/tsearch/ts_cache.h +98 -0
  319. data/ext/pg_query/include/utils/acl.h +312 -0
  320. data/ext/pg_query/include/utils/aclchk_internal.h +45 -0
  321. data/ext/pg_query/include/utils/array.h +458 -0
  322. data/ext/pg_query/include/utils/builtins.h +127 -0
  323. data/ext/pg_query/include/utils/bytea.h +27 -0
  324. data/ext/pg_query/include/utils/catcache.h +231 -0
  325. data/ext/pg_query/include/utils/date.h +90 -0
  326. data/ext/pg_query/include/utils/datetime.h +343 -0
  327. data/ext/pg_query/include/utils/datum.h +68 -0
  328. data/ext/pg_query/include/utils/dsa.h +123 -0
  329. data/ext/pg_query/include/utils/dynahash.h +19 -0
  330. data/ext/pg_query/include/utils/elog.h +439 -0
  331. data/ext/pg_query/include/utils/errcodes.h +352 -0
  332. data/ext/pg_query/include/utils/expandeddatum.h +159 -0
  333. data/ext/pg_query/include/utils/expandedrecord.h +231 -0
  334. data/ext/pg_query/include/utils/float.h +356 -0
  335. data/ext/pg_query/include/utils/fmgroids.h +2657 -0
  336. data/ext/pg_query/include/utils/fmgrprotos.h +2646 -0
  337. data/ext/pg_query/include/utils/fmgrtab.h +48 -0
  338. data/ext/pg_query/include/utils/guc.h +443 -0
  339. data/ext/pg_query/include/utils/guc_tables.h +272 -0
  340. data/ext/pg_query/include/utils/hsearch.h +149 -0
  341. data/ext/pg_query/include/utils/inval.h +64 -0
  342. data/ext/pg_query/include/utils/lsyscache.h +197 -0
  343. data/ext/pg_query/include/utils/memdebug.h +82 -0
  344. data/ext/pg_query/include/utils/memutils.h +225 -0
  345. data/ext/pg_query/include/utils/numeric.h +76 -0
  346. data/ext/pg_query/include/utils/palloc.h +136 -0
  347. data/ext/pg_query/include/utils/partcache.h +102 -0
  348. data/ext/pg_query/include/utils/pg_locale.h +119 -0
  349. data/ext/pg_query/include/utils/pg_lsn.h +29 -0
  350. data/ext/pg_query/include/utils/pidfile.h +56 -0
  351. data/ext/pg_query/include/utils/plancache.h +235 -0
  352. data/ext/pg_query/include/utils/portal.h +241 -0
  353. data/ext/pg_query/include/utils/probes.h +114 -0
  354. data/ext/pg_query/include/utils/ps_status.h +25 -0
  355. data/ext/pg_query/include/utils/queryenvironment.h +74 -0
  356. data/ext/pg_query/include/utils/regproc.h +28 -0
  357. data/ext/pg_query/include/utils/rel.h +644 -0
  358. data/ext/pg_query/include/utils/relcache.h +151 -0
  359. data/ext/pg_query/include/utils/reltrigger.h +81 -0
  360. data/ext/pg_query/include/utils/resowner.h +86 -0
  361. data/ext/pg_query/include/utils/rls.h +50 -0
  362. data/ext/pg_query/include/utils/ruleutils.h +44 -0
  363. data/ext/pg_query/include/utils/sharedtuplestore.h +61 -0
  364. data/ext/pg_query/include/utils/snapmgr.h +158 -0
  365. data/ext/pg_query/include/utils/snapshot.h +206 -0
  366. data/ext/pg_query/include/utils/sortsupport.h +276 -0
  367. data/ext/pg_query/include/utils/syscache.h +219 -0
  368. data/ext/pg_query/include/utils/timeout.h +88 -0
  369. data/ext/pg_query/include/utils/timestamp.h +116 -0
  370. data/ext/pg_query/include/utils/tuplesort.h +277 -0
  371. data/ext/pg_query/include/utils/tuplestore.h +91 -0
  372. data/ext/pg_query/include/utils/typcache.h +202 -0
  373. data/ext/pg_query/include/utils/tzparser.h +39 -0
  374. data/ext/pg_query/include/utils/varlena.h +39 -0
  375. data/ext/pg_query/include/utils/xml.h +84 -0
  376. data/ext/pg_query/include/xxhash.h +5445 -0
  377. data/ext/pg_query/include/xxhash/xxhash.h +5445 -0
  378. data/ext/pg_query/pg_query.c +104 -0
  379. data/ext/pg_query/pg_query.pb-c.c +37628 -0
  380. data/ext/pg_query/pg_query_deparse.c +9959 -0
  381. data/ext/pg_query/pg_query_fingerprint.c +295 -0
  382. data/ext/pg_query/pg_query_fingerprint.h +8 -0
  383. data/ext/pg_query/pg_query_internal.h +24 -0
  384. data/ext/pg_query/pg_query_json_plpgsql.c +738 -0
  385. data/ext/pg_query/pg_query_json_plpgsql.h +9 -0
  386. data/ext/pg_query/pg_query_normalize.c +439 -0
  387. data/ext/pg_query/pg_query_outfuncs.h +10 -0
  388. data/ext/pg_query/pg_query_outfuncs_json.c +297 -0
  389. data/ext/pg_query/pg_query_outfuncs_protobuf.c +237 -0
  390. data/ext/pg_query/pg_query_parse.c +148 -0
  391. data/ext/pg_query/pg_query_parse_plpgsql.c +460 -0
  392. data/ext/pg_query/pg_query_readfuncs.h +11 -0
  393. data/ext/pg_query/pg_query_readfuncs_protobuf.c +142 -0
  394. data/ext/pg_query/pg_query_ruby.c +108 -12
  395. data/ext/pg_query/pg_query_scan.c +173 -0
  396. data/ext/pg_query/pg_query_split.c +221 -0
  397. data/ext/pg_query/protobuf-c.c +3660 -0
  398. data/ext/pg_query/src_backend_catalog_namespace.c +1051 -0
  399. data/ext/pg_query/src_backend_catalog_pg_proc.c +142 -0
  400. data/ext/pg_query/src_backend_commands_define.c +117 -0
  401. data/ext/pg_query/src_backend_libpq_pqcomm.c +651 -0
  402. data/ext/pg_query/src_backend_nodes_bitmapset.c +513 -0
  403. data/ext/pg_query/src_backend_nodes_copyfuncs.c +6013 -0
  404. data/ext/pg_query/src_backend_nodes_equalfuncs.c +4003 -0
  405. data/ext/pg_query/src_backend_nodes_extensible.c +99 -0
  406. data/ext/pg_query/src_backend_nodes_list.c +922 -0
  407. data/ext/pg_query/src_backend_nodes_makefuncs.c +417 -0
  408. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +1363 -0
  409. data/ext/pg_query/src_backend_nodes_value.c +84 -0
  410. data/ext/pg_query/src_backend_parser_gram.c +47456 -0
  411. data/ext/pg_query/src_backend_parser_parse_expr.c +313 -0
  412. data/ext/pg_query/src_backend_parser_parser.c +497 -0
  413. data/ext/pg_query/src_backend_parser_scan.c +7091 -0
  414. data/ext/pg_query/src_backend_parser_scansup.c +160 -0
  415. data/ext/pg_query/src_backend_postmaster_postmaster.c +2230 -0
  416. data/ext/pg_query/src_backend_storage_ipc_ipc.c +192 -0
  417. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +370 -0
  418. data/ext/pg_query/src_backend_tcop_postgres.c +776 -0
  419. data/ext/pg_query/src_backend_utils_adt_datum.c +326 -0
  420. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +98 -0
  421. data/ext/pg_query/src_backend_utils_adt_format_type.c +136 -0
  422. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +1683 -0
  423. data/ext/pg_query/src_backend_utils_error_assert.c +74 -0
  424. data/ext/pg_query/src_backend_utils_error_elog.c +1748 -0
  425. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +570 -0
  426. data/ext/pg_query/src_backend_utils_hash_dynahash.c +1086 -0
  427. data/ext/pg_query/src_backend_utils_init_globals.c +168 -0
  428. data/ext/pg_query/src_backend_utils_mb_mbutils.c +839 -0
  429. data/ext/pg_query/src_backend_utils_misc_guc.c +1831 -0
  430. data/ext/pg_query/src_backend_utils_mmgr_aset.c +1560 -0
  431. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +1006 -0
  432. data/ext/pg_query/src_common_encnames.c +158 -0
  433. data/ext/pg_query/src_common_keywords.c +39 -0
  434. data/ext/pg_query/src_common_kwlist_d.h +1081 -0
  435. data/ext/pg_query/src_common_kwlookup.c +91 -0
  436. data/ext/pg_query/src_common_psprintf.c +158 -0
  437. data/ext/pg_query/src_common_string.c +86 -0
  438. data/ext/pg_query/src_common_stringinfo.c +336 -0
  439. data/ext/pg_query/src_common_wchar.c +1651 -0
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1133 -0
  441. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +877 -0
  442. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +6533 -0
  443. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +107 -0
  444. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +123 -0
  445. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +671 -0
  446. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +255 -0
  447. data/ext/pg_query/src_port_erand48.c +127 -0
  448. data/ext/pg_query/src_port_pg_bitutils.c +246 -0
  449. data/ext/pg_query/src_port_pgsleep.c +69 -0
  450. data/ext/pg_query/src_port_pgstrcasecmp.c +83 -0
  451. data/ext/pg_query/src_port_qsort.c +240 -0
  452. data/ext/pg_query/src_port_random.c +31 -0
  453. data/ext/pg_query/src_port_snprintf.c +1449 -0
  454. data/ext/pg_query/src_port_strerror.c +324 -0
  455. data/ext/pg_query/src_port_strnlen.c +39 -0
  456. data/ext/pg_query/xxhash.c +43 -0
  457. data/lib/pg_query.rb +7 -4
  458. data/lib/pg_query/constants.rb +21 -0
  459. data/lib/pg_query/deparse.rb +15 -1581
  460. data/lib/pg_query/filter_columns.rb +88 -85
  461. data/lib/pg_query/fingerprint.rb +122 -87
  462. data/lib/pg_query/json_field_names.rb +1402 -0
  463. data/lib/pg_query/node.rb +31 -0
  464. data/lib/pg_query/param_refs.rb +42 -37
  465. data/lib/pg_query/parse.rb +220 -203
  466. data/lib/pg_query/parse_error.rb +1 -1
  467. data/lib/pg_query/pg_query_pb.rb +3211 -0
  468. data/lib/pg_query/scan.rb +23 -0
  469. data/lib/pg_query/treewalker.rb +24 -40
  470. data/lib/pg_query/truncate.rb +71 -42
  471. data/lib/pg_query/version.rb +2 -2
  472. metadata +472 -11
  473. data/ext/pg_query/pg_query_ruby.h +0 -10
  474. data/lib/pg_query/deep_dup.rb +0 -16
  475. data/lib/pg_query/deparse/alter_table.rb +0 -42
  476. data/lib/pg_query/deparse/interval.rb +0 -105
  477. data/lib/pg_query/deparse/keywords.rb +0 -159
  478. data/lib/pg_query/deparse/rename.rb +0 -41
  479. data/lib/pg_query/legacy_parsetree.rb +0 -109
  480. data/lib/pg_query/node_types.rb +0 -296
@@ -0,0 +1,109 @@
1
+ /*
2
+ * xlogdefs.h
3
+ *
4
+ * Postgres write-ahead log manager record pointer and
5
+ * timeline number definitions
6
+ *
7
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1994, Regents of the University of California
9
+ *
10
+ * src/include/access/xlogdefs.h
11
+ */
12
+ #ifndef XLOG_DEFS_H
13
+ #define XLOG_DEFS_H
14
+
15
+ #include <fcntl.h> /* need open() flags */
16
+
17
+ /*
18
+ * Pointer to a location in the XLOG. These pointers are 64 bits wide,
19
+ * because we don't want them ever to overflow.
20
+ */
21
+ typedef uint64 XLogRecPtr;
22
+
23
+ /*
24
+ * Zero is used indicate an invalid pointer. Bootstrap skips the first possible
25
+ * WAL segment, initializing the first WAL page at WAL segment size, so no XLOG
26
+ * record can begin at zero.
27
+ */
28
+ #define InvalidXLogRecPtr 0
29
+ #define XLogRecPtrIsInvalid(r) ((r) == InvalidXLogRecPtr)
30
+
31
+ /*
32
+ * First LSN to use for "fake" LSNs.
33
+ *
34
+ * Values smaller than this can be used for special per-AM purposes.
35
+ */
36
+ #define FirstNormalUnloggedLSN ((XLogRecPtr) 1000)
37
+
38
+ /*
39
+ * XLogSegNo - physical log file sequence number.
40
+ */
41
+ typedef uint64 XLogSegNo;
42
+
43
+ /*
44
+ * TimeLineID (TLI) - identifies different database histories to prevent
45
+ * confusion after restoring a prior state of a database installation.
46
+ * TLI does not change in a normal stop/restart of the database (including
47
+ * crash-and-recover cases); but we must assign a new TLI after doing
48
+ * a recovery to a prior state, a/k/a point-in-time recovery. This makes
49
+ * the new WAL logfile sequence we generate distinguishable from the
50
+ * sequence that was generated in the previous incarnation.
51
+ */
52
+ typedef uint32 TimeLineID;
53
+
54
+ /*
55
+ * Replication origin id - this is located in this file to avoid having to
56
+ * include origin.h in a bunch of xlog related places.
57
+ */
58
+ typedef uint16 RepOriginId;
59
+
60
+ /*
61
+ * Because O_DIRECT bypasses the kernel buffers, and because we never
62
+ * read those buffers except during crash recovery or if wal_level != minimal,
63
+ * it is a win to use it in all cases where we sync on each write(). We could
64
+ * allow O_DIRECT with fsync(), but it is unclear if fsync() could process
65
+ * writes not buffered in the kernel. Also, O_DIRECT is never enough to force
66
+ * data to the drives, it merely tries to bypass the kernel cache, so we still
67
+ * need O_SYNC/O_DSYNC.
68
+ */
69
+ #ifdef O_DIRECT
70
+ #define PG_O_DIRECT O_DIRECT
71
+ #else
72
+ #define PG_O_DIRECT 0
73
+ #endif
74
+
75
+ /*
76
+ * This chunk of hackery attempts to determine which file sync methods
77
+ * are available on the current platform, and to choose an appropriate
78
+ * default method. We assume that fsync() is always available, and that
79
+ * configure determined whether fdatasync() is.
80
+ */
81
+ #if defined(O_SYNC)
82
+ #define OPEN_SYNC_FLAG O_SYNC
83
+ #elif defined(O_FSYNC)
84
+ #define OPEN_SYNC_FLAG O_FSYNC
85
+ #endif
86
+
87
+ #if defined(O_DSYNC)
88
+ #if defined(OPEN_SYNC_FLAG)
89
+ /* O_DSYNC is distinct? */
90
+ #if O_DSYNC != OPEN_SYNC_FLAG
91
+ #define OPEN_DATASYNC_FLAG O_DSYNC
92
+ #endif
93
+ #else /* !defined(OPEN_SYNC_FLAG) */
94
+ /* Win32 only has O_DSYNC */
95
+ #define OPEN_DATASYNC_FLAG O_DSYNC
96
+ #endif
97
+ #endif
98
+
99
+ #if defined(PLATFORM_DEFAULT_SYNC_METHOD)
100
+ #define DEFAULT_SYNC_METHOD PLATFORM_DEFAULT_SYNC_METHOD
101
+ #elif defined(OPEN_DATASYNC_FLAG)
102
+ #define DEFAULT_SYNC_METHOD SYNC_METHOD_OPEN_DSYNC
103
+ #elif defined(HAVE_FDATASYNC)
104
+ #define DEFAULT_SYNC_METHOD SYNC_METHOD_FDATASYNC
105
+ #else
106
+ #define DEFAULT_SYNC_METHOD SYNC_METHOD_FSYNC
107
+ #endif
108
+
109
+ #endif /* XLOG_DEFS_H */
@@ -0,0 +1,64 @@
1
+ /*
2
+ * xloginsert.h
3
+ *
4
+ * Functions for generating WAL records
5
+ *
6
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1994, Regents of the University of California
8
+ *
9
+ * src/include/access/xloginsert.h
10
+ */
11
+ #ifndef XLOGINSERT_H
12
+ #define XLOGINSERT_H
13
+
14
+ #include "access/rmgr.h"
15
+ #include "access/xlogdefs.h"
16
+ #include "storage/block.h"
17
+ #include "storage/buf.h"
18
+ #include "storage/relfilenode.h"
19
+ #include "utils/relcache.h"
20
+
21
+ /*
22
+ * The minimum size of the WAL construction working area. If you need to
23
+ * register more than XLR_NORMAL_MAX_BLOCK_ID block references or have more
24
+ * than XLR_NORMAL_RDATAS data chunks in a single WAL record, you must call
25
+ * XLogEnsureRecordSpace() first to allocate more working memory.
26
+ */
27
+ #define XLR_NORMAL_MAX_BLOCK_ID 4
28
+ #define XLR_NORMAL_RDATAS 20
29
+
30
+ /* flags for XLogRegisterBuffer */
31
+ #define REGBUF_FORCE_IMAGE 0x01 /* force a full-page image */
32
+ #define REGBUF_NO_IMAGE 0x02 /* don't take a full-page image */
33
+ #define REGBUF_WILL_INIT (0x04 | 0x02) /* page will be re-initialized at
34
+ * replay (implies NO_IMAGE) */
35
+ #define REGBUF_STANDARD 0x08 /* page follows "standard" page layout,
36
+ * (data between pd_lower and pd_upper
37
+ * will be skipped) */
38
+ #define REGBUF_KEEP_DATA 0x10 /* include data even if a full-page image
39
+ * is taken */
40
+
41
+ /* prototypes for public functions in xloginsert.c: */
42
+ extern void XLogBeginInsert(void);
43
+ extern void XLogSetRecordFlags(uint8 flags);
44
+ extern XLogRecPtr XLogInsert(RmgrId rmid, uint8 info);
45
+ extern void XLogEnsureRecordSpace(int max_block_id, int ndatas);
46
+ extern void XLogRegisterData(char *data, int len);
47
+ extern void XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags);
48
+ extern void XLogRegisterBlock(uint8 block_id, RelFileNode *rnode,
49
+ ForkNumber forknum, BlockNumber blknum, char *page,
50
+ uint8 flags);
51
+ extern void XLogRegisterBufData(uint8 block_id, char *data, int len);
52
+ extern void XLogResetInsertion(void);
53
+ extern bool XLogCheckBufferNeedsBackup(Buffer buffer);
54
+
55
+ extern XLogRecPtr log_newpage(RelFileNode *rnode, ForkNumber forkNum,
56
+ BlockNumber blk, char *page, bool page_std);
57
+ extern XLogRecPtr log_newpage_buffer(Buffer buffer, bool page_std);
58
+ extern void log_newpage_range(Relation rel, ForkNumber forkNum,
59
+ BlockNumber startblk, BlockNumber endblk, bool page_std);
60
+ extern XLogRecPtr XLogSaveBufferForHint(Buffer buffer, bool buffer_std);
61
+
62
+ extern void InitXLogInsert(void);
63
+
64
+ #endif /* XLOGINSERT_H */
@@ -0,0 +1,327 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * xlogreader.h
4
+ * Definitions for the generic XLog reading facility
5
+ *
6
+ * Portions Copyright (c) 2013-2020, PostgreSQL Global Development Group
7
+ *
8
+ * IDENTIFICATION
9
+ * src/include/access/xlogreader.h
10
+ *
11
+ * NOTES
12
+ * See the definition of the XLogReaderState struct for instructions on
13
+ * how to use the XLogReader infrastructure.
14
+ *
15
+ * The basic idea is to allocate an XLogReaderState via
16
+ * XLogReaderAllocate(), position the reader to the first record with
17
+ * XLogBeginRead() or XLogFindNextRecord(), and call XLogReadRecord()
18
+ * until it returns NULL.
19
+ *
20
+ * Callers supply a page_read callback if they want to to call
21
+ * XLogReadRecord or XLogFindNextRecord; it can be passed in as NULL
22
+ * otherwise. The WALRead function can be used as a helper to write
23
+ * page_read callbacks, but it is not mandatory; callers that use it,
24
+ * must supply segment_open callbacks. The segment_close callback
25
+ * must always be supplied.
26
+ *
27
+ * After reading a record with XLogReadRecord(), it's decomposed into
28
+ * the per-block and main data parts, and the parts can be accessed
29
+ * with the XLogRec* macros and functions. You can also decode a
30
+ * record that's already constructed in memory, without reading from
31
+ * disk, by calling the DecodeXLogRecord() function.
32
+ *-------------------------------------------------------------------------
33
+ */
34
+ #ifndef XLOGREADER_H
35
+ #define XLOGREADER_H
36
+
37
+ #ifndef FRONTEND
38
+ #include "access/transam.h"
39
+ #endif
40
+
41
+ #include "access/xlogrecord.h"
42
+
43
+ /* WALOpenSegment represents a WAL segment being read. */
44
+ typedef struct WALOpenSegment
45
+ {
46
+ int ws_file; /* segment file descriptor */
47
+ XLogSegNo ws_segno; /* segment number */
48
+ TimeLineID ws_tli; /* timeline ID of the currently open file */
49
+ } WALOpenSegment;
50
+
51
+ /* WALSegmentContext carries context information about WAL segments to read */
52
+ typedef struct WALSegmentContext
53
+ {
54
+ char ws_dir[MAXPGPATH];
55
+ int ws_segsize;
56
+ } WALSegmentContext;
57
+
58
+ typedef struct XLogReaderState XLogReaderState;
59
+
60
+ /* Function type definitions for various xlogreader interactions */
61
+ typedef int (*XLogPageReadCB) (XLogReaderState *xlogreader,
62
+ XLogRecPtr targetPagePtr,
63
+ int reqLen,
64
+ XLogRecPtr targetRecPtr,
65
+ char *readBuf);
66
+ typedef void (*WALSegmentOpenCB) (XLogReaderState *xlogreader,
67
+ XLogSegNo nextSegNo,
68
+ TimeLineID *tli_p);
69
+ typedef void (*WALSegmentCloseCB) (XLogReaderState *xlogreader);
70
+
71
+ typedef struct XLogReaderRoutine
72
+ {
73
+ /*
74
+ * Data input callback
75
+ *
76
+ * This callback shall read at least reqLen valid bytes of the xlog page
77
+ * starting at targetPagePtr, and store them in readBuf. The callback
78
+ * shall return the number of bytes read (never more than XLOG_BLCKSZ), or
79
+ * -1 on failure. The callback shall sleep, if necessary, to wait for the
80
+ * requested bytes to become available. The callback will not be invoked
81
+ * again for the same page unless more than the returned number of bytes
82
+ * are needed.
83
+ *
84
+ * targetRecPtr is the position of the WAL record we're reading. Usually
85
+ * it is equal to targetPagePtr + reqLen, but sometimes xlogreader needs
86
+ * to read and verify the page or segment header, before it reads the
87
+ * actual WAL record it's interested in. In that case, targetRecPtr can
88
+ * be used to determine which timeline to read the page from.
89
+ *
90
+ * The callback shall set ->seg.ws_tli to the TLI of the file the page was
91
+ * read from.
92
+ */
93
+ XLogPageReadCB page_read;
94
+
95
+ /*
96
+ * Callback to open the specified WAL segment for reading. ->seg.ws_file
97
+ * shall be set to the file descriptor of the opened segment. In case of
98
+ * failure, an error shall be raised by the callback and it shall not
99
+ * return.
100
+ *
101
+ * "nextSegNo" is the number of the segment to be opened.
102
+ *
103
+ * "tli_p" is an input/output argument. WALRead() uses it to pass the
104
+ * timeline in which the new segment should be found, but the callback can
105
+ * use it to return the TLI that it actually opened.
106
+ */
107
+ WALSegmentOpenCB segment_open;
108
+
109
+ /*
110
+ * WAL segment close callback. ->seg.ws_file shall be set to a negative
111
+ * number.
112
+ */
113
+ WALSegmentCloseCB segment_close;
114
+ } XLogReaderRoutine;
115
+
116
+ #define XL_ROUTINE(...) &(XLogReaderRoutine){__VA_ARGS__}
117
+
118
+ typedef struct
119
+ {
120
+ /* Is this block ref in use? */
121
+ bool in_use;
122
+
123
+ /* Identify the block this refers to */
124
+ RelFileNode rnode;
125
+ ForkNumber forknum;
126
+ BlockNumber blkno;
127
+
128
+ /* copy of the fork_flags field from the XLogRecordBlockHeader */
129
+ uint8 flags;
130
+
131
+ /* Information on full-page image, if any */
132
+ bool has_image; /* has image, even for consistency checking */
133
+ bool apply_image; /* has image that should be restored */
134
+ char *bkp_image;
135
+ uint16 hole_offset;
136
+ uint16 hole_length;
137
+ uint16 bimg_len;
138
+ uint8 bimg_info;
139
+
140
+ /* Buffer holding the rmgr-specific data associated with this block */
141
+ bool has_data;
142
+ char *data;
143
+ uint16 data_len;
144
+ uint16 data_bufsz;
145
+ } DecodedBkpBlock;
146
+
147
+ struct XLogReaderState
148
+ {
149
+ /*
150
+ * Operational callbacks
151
+ */
152
+ XLogReaderRoutine routine;
153
+
154
+ /* ----------------------------------------
155
+ * Public parameters
156
+ * ----------------------------------------
157
+ */
158
+
159
+ /*
160
+ * System identifier of the xlog files we're about to read. Set to zero
161
+ * (the default value) if unknown or unimportant.
162
+ */
163
+ uint64 system_identifier;
164
+
165
+ /*
166
+ * Opaque data for callbacks to use. Not used by XLogReader.
167
+ */
168
+ void *private_data;
169
+
170
+ /*
171
+ * Start and end point of last record read. EndRecPtr is also used as the
172
+ * position to read next. Calling XLogBeginRead() sets EndRecPtr to the
173
+ * starting position and ReadRecPtr to invalid.
174
+ */
175
+ XLogRecPtr ReadRecPtr; /* start of last record read */
176
+ XLogRecPtr EndRecPtr; /* end+1 of last record read */
177
+
178
+
179
+ /* ----------------------------------------
180
+ * Decoded representation of current record
181
+ *
182
+ * Use XLogRecGet* functions to investigate the record; these fields
183
+ * should not be accessed directly.
184
+ * ----------------------------------------
185
+ */
186
+ XLogRecord *decoded_record; /* currently decoded record */
187
+
188
+ char *main_data; /* record's main data portion */
189
+ uint32 main_data_len; /* main data portion's length */
190
+ uint32 main_data_bufsz; /* allocated size of the buffer */
191
+
192
+ RepOriginId record_origin;
193
+
194
+ /* information about blocks referenced by the record. */
195
+ DecodedBkpBlock blocks[XLR_MAX_BLOCK_ID + 1];
196
+
197
+ int max_block_id; /* highest block_id in use (-1 if none) */
198
+
199
+ /* ----------------------------------------
200
+ * private/internal state
201
+ * ----------------------------------------
202
+ */
203
+
204
+ /*
205
+ * Buffer for currently read page (XLOG_BLCKSZ bytes, valid up to at least
206
+ * readLen bytes)
207
+ */
208
+ char *readBuf;
209
+ uint32 readLen;
210
+
211
+ /* last read XLOG position for data currently in readBuf */
212
+ WALSegmentContext segcxt;
213
+ WALOpenSegment seg;
214
+ uint32 segoff;
215
+
216
+ /*
217
+ * beginning of prior page read, and its TLI. Doesn't necessarily
218
+ * correspond to what's in readBuf; used for timeline sanity checks.
219
+ */
220
+ XLogRecPtr latestPagePtr;
221
+ TimeLineID latestPageTLI;
222
+
223
+ /* beginning of the WAL record being read. */
224
+ XLogRecPtr currRecPtr;
225
+ /* timeline to read it from, 0 if a lookup is required */
226
+ TimeLineID currTLI;
227
+
228
+ /*
229
+ * Safe point to read to in currTLI if current TLI is historical
230
+ * (tliSwitchPoint) or InvalidXLogRecPtr if on current timeline.
231
+ *
232
+ * Actually set to the start of the segment containing the timeline switch
233
+ * that ends currTLI's validity, not the LSN of the switch its self, since
234
+ * we can't assume the old segment will be present.
235
+ */
236
+ XLogRecPtr currTLIValidUntil;
237
+
238
+ /*
239
+ * If currTLI is not the most recent known timeline, the next timeline to
240
+ * read from when currTLIValidUntil is reached.
241
+ */
242
+ TimeLineID nextTLI;
243
+
244
+ /*
245
+ * Buffer for current ReadRecord result (expandable), used when a record
246
+ * crosses a page boundary.
247
+ */
248
+ char *readRecordBuf;
249
+ uint32 readRecordBufSize;
250
+
251
+ /* Buffer to hold error message */
252
+ char *errormsg_buf;
253
+ };
254
+
255
+ /* Get a new XLogReader */
256
+ extern XLogReaderState *XLogReaderAllocate(int wal_segment_size,
257
+ const char *waldir,
258
+ XLogReaderRoutine *routine,
259
+ void *private_data);
260
+ extern XLogReaderRoutine *LocalXLogReaderRoutine(void);
261
+
262
+ /* Free an XLogReader */
263
+ extern void XLogReaderFree(XLogReaderState *state);
264
+
265
+ /* Position the XLogReader to given record */
266
+ extern void XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr);
267
+ #ifdef FRONTEND
268
+ extern XLogRecPtr XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr);
269
+ #endif /* FRONTEND */
270
+
271
+ /* Read the next XLog record. Returns NULL on end-of-WAL or failure */
272
+ extern struct XLogRecord *XLogReadRecord(XLogReaderState *state,
273
+ char **errormsg);
274
+
275
+ /* Validate a page */
276
+ extern bool XLogReaderValidatePageHeader(XLogReaderState *state,
277
+ XLogRecPtr recptr, char *phdr);
278
+
279
+ /*
280
+ * Error information from WALRead that both backend and frontend caller can
281
+ * process. Currently only errors from pg_pread can be reported.
282
+ */
283
+ typedef struct WALReadError
284
+ {
285
+ int wre_errno; /* errno set by the last pg_pread() */
286
+ int wre_off; /* Offset we tried to read from. */
287
+ int wre_req; /* Bytes requested to be read. */
288
+ int wre_read; /* Bytes read by the last read(). */
289
+ WALOpenSegment wre_seg; /* Segment we tried to read from. */
290
+ } WALReadError;
291
+
292
+ extern bool WALRead(XLogReaderState *state,
293
+ char *buf, XLogRecPtr startptr, Size count,
294
+ TimeLineID tli, WALReadError *errinfo);
295
+
296
+ /* Functions for decoding an XLogRecord */
297
+
298
+ extern bool DecodeXLogRecord(XLogReaderState *state, XLogRecord *record,
299
+ char **errmsg);
300
+
301
+ #define XLogRecGetTotalLen(decoder) ((decoder)->decoded_record->xl_tot_len)
302
+ #define XLogRecGetPrev(decoder) ((decoder)->decoded_record->xl_prev)
303
+ #define XLogRecGetInfo(decoder) ((decoder)->decoded_record->xl_info)
304
+ #define XLogRecGetRmid(decoder) ((decoder)->decoded_record->xl_rmid)
305
+ #define XLogRecGetXid(decoder) ((decoder)->decoded_record->xl_xid)
306
+ #define XLogRecGetOrigin(decoder) ((decoder)->record_origin)
307
+ #define XLogRecGetData(decoder) ((decoder)->main_data)
308
+ #define XLogRecGetDataLen(decoder) ((decoder)->main_data_len)
309
+ #define XLogRecHasAnyBlockRefs(decoder) ((decoder)->max_block_id >= 0)
310
+ #define XLogRecHasBlockRef(decoder, block_id) \
311
+ ((decoder)->blocks[block_id].in_use)
312
+ #define XLogRecHasBlockImage(decoder, block_id) \
313
+ ((decoder)->blocks[block_id].has_image)
314
+ #define XLogRecBlockImageApply(decoder, block_id) \
315
+ ((decoder)->blocks[block_id].apply_image)
316
+
317
+ #ifndef FRONTEND
318
+ extern FullTransactionId XLogRecGetFullXid(XLogReaderState *record);
319
+ #endif
320
+
321
+ extern bool RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page);
322
+ extern char *XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len);
323
+ extern bool XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id,
324
+ RelFileNode *rnode, ForkNumber *forknum,
325
+ BlockNumber *blknum);
326
+
327
+ #endif /* XLOGREADER_H */