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,115 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * pg_publication.h
4
+ * definition of the "publication" system catalog (pg_publication)
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/catalog/pg_publication.h
10
+ *
11
+ * NOTES
12
+ * The Catalog.pm module reads this file and derives schema
13
+ * information.
14
+ *
15
+ *-------------------------------------------------------------------------
16
+ */
17
+ #ifndef PG_PUBLICATION_H
18
+ #define PG_PUBLICATION_H
19
+
20
+ #include "catalog/genbki.h"
21
+ #include "catalog/objectaddress.h"
22
+ #include "catalog/pg_publication_d.h"
23
+
24
+ /* ----------------
25
+ * pg_publication definition. cpp turns this into
26
+ * typedef struct FormData_pg_publication
27
+ * ----------------
28
+ */
29
+ CATALOG(pg_publication,6104,PublicationRelationId)
30
+ {
31
+ Oid oid; /* oid */
32
+
33
+ NameData pubname; /* name of the publication */
34
+
35
+ Oid pubowner; /* publication owner */
36
+
37
+ /*
38
+ * indicates that this is special publication which should encompass all
39
+ * tables in the database (except for the unlogged and temp ones)
40
+ */
41
+ bool puballtables;
42
+
43
+ /* true if inserts are published */
44
+ bool pubinsert;
45
+
46
+ /* true if updates are published */
47
+ bool pubupdate;
48
+
49
+ /* true if deletes are published */
50
+ bool pubdelete;
51
+
52
+ /* true if truncates are published */
53
+ bool pubtruncate;
54
+
55
+ /* true if partition changes are published using root schema */
56
+ bool pubviaroot;
57
+ } FormData_pg_publication;
58
+
59
+ /* ----------------
60
+ * Form_pg_publication corresponds to a pointer to a tuple with
61
+ * the format of pg_publication relation.
62
+ * ----------------
63
+ */
64
+ typedef FormData_pg_publication *Form_pg_publication;
65
+
66
+ typedef struct PublicationActions
67
+ {
68
+ bool pubinsert;
69
+ bool pubupdate;
70
+ bool pubdelete;
71
+ bool pubtruncate;
72
+ } PublicationActions;
73
+
74
+ typedef struct Publication
75
+ {
76
+ Oid oid;
77
+ char *name;
78
+ bool alltables;
79
+ bool pubviaroot;
80
+ PublicationActions pubactions;
81
+ } Publication;
82
+
83
+ extern Publication *GetPublication(Oid pubid);
84
+ extern Publication *GetPublicationByName(const char *pubname, bool missing_ok);
85
+ extern List *GetRelationPublications(Oid relid);
86
+
87
+ /*---------
88
+ * Expected values for pub_partopt parameter of GetRelationPublications(),
89
+ * which allows callers to specify which partitions of partitioned tables
90
+ * mentioned in the publication they expect to see.
91
+ *
92
+ * ROOT: only the table explicitly mentioned in the publication
93
+ * LEAF: only leaf partitions in given tree
94
+ * ALL: all partitions in given tree
95
+ */
96
+ typedef enum PublicationPartOpt
97
+ {
98
+ PUBLICATION_PART_ROOT,
99
+ PUBLICATION_PART_LEAF,
100
+ PUBLICATION_PART_ALL,
101
+ } PublicationPartOpt;
102
+
103
+ extern List *GetPublicationRelations(Oid pubid, PublicationPartOpt pub_partopt);
104
+ extern List *GetAllTablesPublications(void);
105
+ extern List *GetAllTablesPublicationRelations(bool pubviaroot);
106
+
107
+ extern bool is_publishable_relation(Relation rel);
108
+ extern ObjectAddress publication_add_relation(Oid pubid, Relation targetrel,
109
+ bool if_not_exists);
110
+
111
+ extern Oid get_publication_oid(const char *pubname, bool missing_ok);
112
+ extern char *get_publication_name(Oid pubid, bool missing_ok);
113
+
114
+
115
+ #endif /* PG_PUBLICATION_H */
@@ -0,0 +1,36 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * pg_publication_d.h
4
+ * Macro definitions for pg_publication
5
+ *
6
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1994, Regents of the University of California
8
+ *
9
+ * NOTES
10
+ * ******************************
11
+ * *** DO NOT EDIT THIS FILE! ***
12
+ * ******************************
13
+ *
14
+ * It has been GENERATED by src/backend/catalog/genbki.pl
15
+ *
16
+ *-------------------------------------------------------------------------
17
+ */
18
+ #ifndef PG_PUBLICATION_D_H
19
+ #define PG_PUBLICATION_D_H
20
+
21
+ #define PublicationRelationId 6104
22
+
23
+ #define Anum_pg_publication_oid 1
24
+ #define Anum_pg_publication_pubname 2
25
+ #define Anum_pg_publication_pubowner 3
26
+ #define Anum_pg_publication_puballtables 4
27
+ #define Anum_pg_publication_pubinsert 5
28
+ #define Anum_pg_publication_pubupdate 6
29
+ #define Anum_pg_publication_pubdelete 7
30
+ #define Anum_pg_publication_pubtruncate 8
31
+ #define Anum_pg_publication_pubviaroot 9
32
+
33
+ #define Natts_pg_publication 9
34
+
35
+
36
+ #endif /* PG_PUBLICATION_D_H */
@@ -0,0 +1,57 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * pg_replication_origin.h
4
+ * definition of the "replication origin" system catalog
5
+ * (pg_replication_origin)
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/catalog/pg_replication_origin.h
11
+ *
12
+ * NOTES
13
+ * The Catalog.pm module reads this file and derives schema
14
+ * information.
15
+ *
16
+ *-------------------------------------------------------------------------
17
+ */
18
+ #ifndef PG_REPLICATION_ORIGIN_H
19
+ #define PG_REPLICATION_ORIGIN_H
20
+
21
+ #include "access/xlogdefs.h"
22
+ #include "catalog/genbki.h"
23
+ #include "catalog/pg_replication_origin_d.h"
24
+
25
+ /* ----------------
26
+ * pg_replication_origin. cpp turns this into
27
+ * typedef struct FormData_pg_replication_origin
28
+ * ----------------
29
+ */
30
+ CATALOG(pg_replication_origin,6000,ReplicationOriginRelationId) BKI_SHARED_RELATION
31
+ {
32
+ /*
33
+ * Locally known id that get included into WAL.
34
+ *
35
+ * This should never leave the system.
36
+ *
37
+ * Needs to fit into an uint16, so we don't waste too much space in WAL
38
+ * records. For this reason we don't use a normal Oid column here, since
39
+ * we need to handle allocation of new values manually.
40
+ */
41
+ Oid roident;
42
+
43
+ /*
44
+ * Variable-length fields start here, but we allow direct access to
45
+ * roname.
46
+ */
47
+
48
+ /* external, free-format, name */
49
+ text roname BKI_FORCE_NOT_NULL;
50
+
51
+ #ifdef CATALOG_VARLEN /* further variable-length fields */
52
+ #endif
53
+ } FormData_pg_replication_origin;
54
+
55
+ typedef FormData_pg_replication_origin *Form_pg_replication_origin;
56
+
57
+ #endif /* PG_REPLICATION_ORIGIN_H */
@@ -0,0 +1,29 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * pg_replication_origin_d.h
4
+ * Macro definitions for pg_replication_origin
5
+ *
6
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1994, Regents of the University of California
8
+ *
9
+ * NOTES
10
+ * ******************************
11
+ * *** DO NOT EDIT THIS FILE! ***
12
+ * ******************************
13
+ *
14
+ * It has been GENERATED by src/backend/catalog/genbki.pl
15
+ *
16
+ *-------------------------------------------------------------------------
17
+ */
18
+ #ifndef PG_REPLICATION_ORIGIN_D_H
19
+ #define PG_REPLICATION_ORIGIN_D_H
20
+
21
+ #define ReplicationOriginRelationId 6000
22
+
23
+ #define Anum_pg_replication_origin_roident 1
24
+ #define Anum_pg_replication_origin_roname 2
25
+
26
+ #define Natts_pg_replication_origin 2
27
+
28
+
29
+ #endif /* PG_REPLICATION_ORIGIN_D_H */
@@ -0,0 +1,275 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * pg_statistic.h
4
+ * definition of the "statistics" system catalog (pg_statistic)
5
+ *
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/catalog/pg_statistic.h
11
+ *
12
+ * NOTES
13
+ * The Catalog.pm module reads this file and derives schema
14
+ * information.
15
+ *
16
+ *-------------------------------------------------------------------------
17
+ */
18
+ #ifndef PG_STATISTIC_H
19
+ #define PG_STATISTIC_H
20
+
21
+ #include "catalog/genbki.h"
22
+ #include "catalog/pg_statistic_d.h"
23
+
24
+ /* ----------------
25
+ * pg_statistic definition. cpp turns this into
26
+ * typedef struct FormData_pg_statistic
27
+ * ----------------
28
+ */
29
+ CATALOG(pg_statistic,2619,StatisticRelationId)
30
+ {
31
+ /* These fields form the unique key for the entry: */
32
+ Oid starelid; /* relation containing attribute */
33
+ int16 staattnum; /* attribute (column) stats are for */
34
+ bool stainherit; /* true if inheritance children are included */
35
+
36
+ /* the fraction of the column's entries that are NULL: */
37
+ float4 stanullfrac;
38
+
39
+ /*
40
+ * stawidth is the average width in bytes of non-null entries. For
41
+ * fixed-width datatypes this is of course the same as the typlen, but for
42
+ * var-width types it is more useful. Note that this is the average width
43
+ * of the data as actually stored, post-TOASTing (eg, for a
44
+ * moved-out-of-line value, only the size of the pointer object is
45
+ * counted). This is the appropriate definition for the primary use of
46
+ * the statistic, which is to estimate sizes of in-memory hash tables of
47
+ * tuples.
48
+ */
49
+ int32 stawidth;
50
+
51
+ /* ----------------
52
+ * stadistinct indicates the (approximate) number of distinct non-null
53
+ * data values in the column. The interpretation is:
54
+ * 0 unknown or not computed
55
+ * > 0 actual number of distinct values
56
+ * < 0 negative of multiplier for number of rows
57
+ * The special negative case allows us to cope with columns that are
58
+ * unique (stadistinct = -1) or nearly so (for example, a column in which
59
+ * non-null values appear about twice on the average could be represented
60
+ * by stadistinct = -0.5 if there are no nulls, or -0.4 if 20% of the
61
+ * column is nulls). Because the number-of-rows statistic in pg_class may
62
+ * be updated more frequently than pg_statistic is, it's important to be
63
+ * able to describe such situations as a multiple of the number of rows,
64
+ * rather than a fixed number of distinct values. But in other cases a
65
+ * fixed number is correct (eg, a boolean column).
66
+ * ----------------
67
+ */
68
+ float4 stadistinct;
69
+
70
+ /* ----------------
71
+ * To allow keeping statistics on different kinds of datatypes,
72
+ * we do not hard-wire any particular meaning for the remaining
73
+ * statistical fields. Instead, we provide several "slots" in which
74
+ * statistical data can be placed. Each slot includes:
75
+ * kind integer code identifying kind of data (see below)
76
+ * op OID of associated operator, if needed
77
+ * coll OID of relevant collation, or 0 if none
78
+ * numbers float4 array (for statistical values)
79
+ * values anyarray (for representations of data values)
80
+ * The ID, operator, and collation fields are never NULL; they are zeroes
81
+ * in an unused slot. The numbers and values fields are NULL in an
82
+ * unused slot, and might also be NULL in a used slot if the slot kind
83
+ * has no need for one or the other.
84
+ * ----------------
85
+ */
86
+
87
+ int16 stakind1;
88
+ int16 stakind2;
89
+ int16 stakind3;
90
+ int16 stakind4;
91
+ int16 stakind5;
92
+
93
+ Oid staop1;
94
+ Oid staop2;
95
+ Oid staop3;
96
+ Oid staop4;
97
+ Oid staop5;
98
+
99
+ Oid stacoll1;
100
+ Oid stacoll2;
101
+ Oid stacoll3;
102
+ Oid stacoll4;
103
+ Oid stacoll5;
104
+
105
+ #ifdef CATALOG_VARLEN /* variable-length fields start here */
106
+ float4 stanumbers1[1];
107
+ float4 stanumbers2[1];
108
+ float4 stanumbers3[1];
109
+ float4 stanumbers4[1];
110
+ float4 stanumbers5[1];
111
+
112
+ /*
113
+ * Values in these arrays are values of the column's data type, or of some
114
+ * related type such as an array element type. We presently have to cheat
115
+ * quite a bit to allow polymorphic arrays of this kind, but perhaps
116
+ * someday it'll be a less bogus facility.
117
+ */
118
+ anyarray stavalues1;
119
+ anyarray stavalues2;
120
+ anyarray stavalues3;
121
+ anyarray stavalues4;
122
+ anyarray stavalues5;
123
+ #endif
124
+ } FormData_pg_statistic;
125
+
126
+ #define STATISTIC_NUM_SLOTS 5
127
+
128
+
129
+ /* ----------------
130
+ * Form_pg_statistic corresponds to a pointer to a tuple with
131
+ * the format of pg_statistic relation.
132
+ * ----------------
133
+ */
134
+ typedef FormData_pg_statistic *Form_pg_statistic;
135
+
136
+ #ifdef EXPOSE_TO_CLIENT_CODE
137
+
138
+ /*
139
+ * Several statistical slot "kinds" are defined by core PostgreSQL, as
140
+ * documented below. Also, custom data types can define their own "kind"
141
+ * codes by mutual agreement between a custom typanalyze routine and the
142
+ * selectivity estimation functions of the type's operators.
143
+ *
144
+ * Code reading the pg_statistic relation should not assume that a particular
145
+ * data "kind" will appear in any particular slot. Instead, search the
146
+ * stakind fields to see if the desired data is available. (The standard
147
+ * function get_attstatsslot() may be used for this.)
148
+ */
149
+
150
+ /*
151
+ * The present allocation of "kind" codes is:
152
+ *
153
+ * 1-99: reserved for assignment by the core PostgreSQL project
154
+ * (values in this range will be documented in this file)
155
+ * 100-199: reserved for assignment by the PostGIS project
156
+ * (values to be documented in PostGIS documentation)
157
+ * 200-299: reserved for assignment by the ESRI ST_Geometry project
158
+ * (values to be documented in ESRI ST_Geometry documentation)
159
+ * 300-9999: reserved for future public assignments
160
+ *
161
+ * For private use you may choose a "kind" code at random in the range
162
+ * 10000-30000. However, for code that is to be widely disseminated it is
163
+ * better to obtain a publicly defined "kind" code by request from the
164
+ * PostgreSQL Global Development Group.
165
+ */
166
+
167
+ /*
168
+ * In a "most common values" slot, staop is the OID of the "=" operator
169
+ * used to decide whether values are the same or not, and stacoll is the
170
+ * collation used (same as column's collation). stavalues contains
171
+ * the K most common non-null values appearing in the column, and stanumbers
172
+ * contains their frequencies (fractions of total row count). The values
173
+ * shall be ordered in decreasing frequency. Note that since the arrays are
174
+ * variable-size, K may be chosen by the statistics collector. Values should
175
+ * not appear in MCV unless they have been observed to occur more than once;
176
+ * a unique column will have no MCV slot.
177
+ */
178
+ #define STATISTIC_KIND_MCV 1
179
+
180
+ /*
181
+ * A "histogram" slot describes the distribution of scalar data. staop is
182
+ * the OID of the "<" operator that describes the sort ordering, and stacoll
183
+ * is the relevant collation. (In theory more than one histogram could appear,
184
+ * if a datatype has more than one useful sort operator or we care about more
185
+ * than one collation. Currently the collation will always be that of the
186
+ * underlying column.) stavalues contains M (>=2) non-null values that
187
+ * divide the non-null column data values into M-1 bins of approximately equal
188
+ * population. The first stavalues item is the MIN and the last is the MAX.
189
+ * stanumbers is not used and should be NULL. IMPORTANT POINT: if an MCV
190
+ * slot is also provided, then the histogram describes the data distribution
191
+ * *after removing the values listed in MCV* (thus, it's a "compressed
192
+ * histogram" in the technical parlance). This allows a more accurate
193
+ * representation of the distribution of a column with some very-common
194
+ * values. In a column with only a few distinct values, it's possible that
195
+ * the MCV list describes the entire data population; in this case the
196
+ * histogram reduces to empty and should be omitted.
197
+ */
198
+ #define STATISTIC_KIND_HISTOGRAM 2
199
+
200
+ /*
201
+ * A "correlation" slot describes the correlation between the physical order
202
+ * of table tuples and the ordering of data values of this column, as seen
203
+ * by the "<" operator identified by staop with the collation identified by
204
+ * stacoll. (As with the histogram, more than one entry could theoretically
205
+ * appear.) stavalues is not used and should be NULL. stanumbers contains
206
+ * a single entry, the correlation coefficient between the sequence of data
207
+ * values and the sequence of their actual tuple positions. The coefficient
208
+ * ranges from +1 to -1.
209
+ */
210
+ #define STATISTIC_KIND_CORRELATION 3
211
+
212
+ /*
213
+ * A "most common elements" slot is similar to a "most common values" slot,
214
+ * except that it stores the most common non-null *elements* of the column
215
+ * values. This is useful when the column datatype is an array or some other
216
+ * type with identifiable elements (for instance, tsvector). staop contains
217
+ * the equality operator appropriate to the element type, and stacoll
218
+ * contains the collation to use with it. stavalues contains
219
+ * the most common element values, and stanumbers their frequencies. Unlike
220
+ * MCV slots, frequencies are measured as the fraction of non-null rows the
221
+ * element value appears in, not the frequency of all rows. Also unlike
222
+ * MCV slots, the values are sorted into the element type's default order
223
+ * (to support binary search for a particular value). Since this puts the
224
+ * minimum and maximum frequencies at unpredictable spots in stanumbers,
225
+ * there are two extra members of stanumbers, holding copies of the minimum
226
+ * and maximum frequencies. Optionally, there can be a third extra member,
227
+ * which holds the frequency of null elements (expressed in the same terms:
228
+ * the fraction of non-null rows that contain at least one null element). If
229
+ * this member is omitted, the column is presumed to contain no null elements.
230
+ *
231
+ * Note: in current usage for tsvector columns, the stavalues elements are of
232
+ * type text, even though their representation within tsvector is not
233
+ * exactly text.
234
+ */
235
+ #define STATISTIC_KIND_MCELEM 4
236
+
237
+ /*
238
+ * A "distinct elements count histogram" slot describes the distribution of
239
+ * the number of distinct element values present in each row of an array-type
240
+ * column. Only non-null rows are considered, and only non-null elements.
241
+ * staop contains the equality operator appropriate to the element type,
242
+ * and stacoll contains the collation to use with it.
243
+ * stavalues is not used and should be NULL. The last member of stanumbers is
244
+ * the average count of distinct element values over all non-null rows. The
245
+ * preceding M (>=2) members form a histogram that divides the population of
246
+ * distinct-elements counts into M-1 bins of approximately equal population.
247
+ * The first of these is the minimum observed count, and the last the maximum.
248
+ */
249
+ #define STATISTIC_KIND_DECHIST 5
250
+
251
+ /*
252
+ * A "length histogram" slot describes the distribution of range lengths in
253
+ * rows of a range-type column. stanumbers contains a single entry, the
254
+ * fraction of empty ranges. stavalues is a histogram of non-empty lengths, in
255
+ * a format similar to STATISTIC_KIND_HISTOGRAM: it contains M (>=2) range
256
+ * values that divide the column data values into M-1 bins of approximately
257
+ * equal population. The lengths are stored as float8s, as measured by the
258
+ * range type's subdiff function. Only non-null rows are considered.
259
+ */
260
+ #define STATISTIC_KIND_RANGE_LENGTH_HISTOGRAM 6
261
+
262
+ /*
263
+ * A "bounds histogram" slot is similar to STATISTIC_KIND_HISTOGRAM, but for
264
+ * a range-type column. stavalues contains M (>=2) range values that divide
265
+ * the column data values into M-1 bins of approximately equal population.
266
+ * Unlike a regular scalar histogram, this is actually two histograms combined
267
+ * into a single array, with the lower bounds of each value forming a
268
+ * histogram of lower bounds, and the upper bounds a histogram of upper
269
+ * bounds. Only non-NULL, non-empty ranges are included.
270
+ */
271
+ #define STATISTIC_KIND_BOUNDS_HISTOGRAM 7
272
+
273
+ #endif /* EXPOSE_TO_CLIENT_CODE */
274
+
275
+ #endif /* PG_STATISTIC_H */