pg_query 1.1.0 → 2.0.1

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 (478) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +163 -52
  3. data/README.md +80 -69
  4. data/Rakefile +82 -1
  5. data/ext/pg_query/extconf.rb +3 -31
  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 +988 -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 +9953 -0
  381. data/ext/pg_query/pg_query_fingerprint.c +292 -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 +437 -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 +16 -1117
  460. data/lib/pg_query/filter_columns.rb +86 -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 -200
  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 +64 -43
  471. data/lib/pg_query/version.rb +2 -2
  472. metadata +473 -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/legacy_parsetree.rb +0 -109
  478. data/lib/pg_query/node_types.rb +0 -284
data/Rakefile CHANGED
@@ -2,6 +2,10 @@ require 'bundler/gem_tasks'
2
2
  require 'rake/extensiontask'
3
3
  require 'rspec/core/rake_task'
4
4
  require 'rubocop/rake_task'
5
+ require 'open-uri'
6
+
7
+ LIB_PG_QUERY_TAG = '13-2.0.0'.freeze
8
+ LIB_PG_QUERY_SHA256SUM = 'e5e6514b1ae0e1ab19a2441de3088988bf1b89778164f9c725c3d85c6903133e'.freeze
5
9
 
6
10
  Rake::ExtensionTask.new 'pg_query' do |ext|
7
11
  ext.lib_dir = 'lib/pg_query'
@@ -12,7 +16,7 @@ RuboCop::RakeTask.new
12
16
 
13
17
  task spec: :compile
14
18
 
15
- task default: %i[lint spec]
19
+ task default: %i[spec lint]
16
20
  task test: :spec
17
21
  task lint: :rubocop
18
22
 
@@ -21,3 +25,80 @@ task :clean do
21
25
  FileUtils.rm_f Dir.glob(File.join(__dir__, 'ext/pg_query/*.o'))
22
26
  FileUtils.rm_f File.join(__dir__, 'lib/pg_query/pg_query.bundle')
23
27
  end
28
+
29
+ task :update_source do
30
+ workdir = File.join(__dir__, 'tmp')
31
+ libdir = File.join(workdir, 'libpg_query-' + LIB_PG_QUERY_TAG)
32
+ filename = File.join(workdir, 'libpg_query-' + LIB_PG_QUERY_TAG + '.tar.gz')
33
+ testfilesdir = File.join(__dir__, 'spec/files')
34
+ extdir = File.join(__dir__, 'ext/pg_query')
35
+ extbakdir = File.join(workdir, 'extbak')
36
+
37
+ unless File.exist?(filename)
38
+ system("mkdir -p #{workdir}")
39
+ File.open(filename, 'wb') do |target_file|
40
+ URI.open('https://codeload.github.com/pganalyze/libpg_query/tar.gz/' + LIB_PG_QUERY_TAG, 'rb') do |read_file|
41
+ target_file.write(read_file.read)
42
+ end
43
+ end
44
+
45
+ checksum = Digest::SHA256.hexdigest(File.read(filename))
46
+
47
+ if checksum != LIB_PG_QUERY_SHA256SUM
48
+ raise "SHA256 of #{filename} does not match: got #{checksum}, expected #{LIB_PG_QUERY_SHA256SUM}"
49
+ end
50
+ end
51
+
52
+ unless Dir.exist?(libdir)
53
+ system("tar -xzf #{filename} -C #{workdir}") || raise('ERROR')
54
+ end
55
+
56
+ # Backup important files from ext dir
57
+ system("rm -fr #{extbakdir}")
58
+ system("mkdir -p #{extbakdir}")
59
+ system("cp -a #{extdir}/pg_query_ruby.{c,sym} #{extdir}/extconf.rb #{extbakdir}")
60
+
61
+ FileUtils.rm_rf extdir
62
+
63
+ # Reduce everything down to one directory
64
+ system("mkdir -p #{extdir}")
65
+ system("cp -a #{libdir}/src/* #{extdir}/")
66
+ system("mv #{extdir}/postgres/* #{extdir}/")
67
+ system("rmdir #{extdir}/postgres")
68
+ system("cp -a #{libdir}/pg_query.h #{extdir}/include")
69
+ # Make sure every .c file in the top-level directory is its own translation unit
70
+ system("mv #{extdir}/*{_conds,_defs,_helper}.c #{extdir}/include")
71
+ # Protobuf definitions
72
+ system("protoc --proto_path=#{libdir}/protobuf --ruby_out=#{File.join(__dir__, 'lib/pg_query')} #{libdir}/protobuf/pg_query.proto")
73
+ system("mkdir -p #{extdir}/include/protobuf")
74
+ system("cp -a #{libdir}/protobuf/*.h #{extdir}/include/protobuf")
75
+ system("cp -a #{libdir}/protobuf/*.c #{extdir}/")
76
+ # Protobuf library code
77
+ system("mkdir -p #{extdir}/include/protobuf-c")
78
+ system("cp -a #{libdir}/vendor/protobuf-c/*.h #{extdir}/include")
79
+ system("cp -a #{libdir}/vendor/protobuf-c/*.h #{extdir}/include/protobuf-c")
80
+ system("cp -a #{libdir}/vendor/protobuf-c/*.c #{extdir}/")
81
+ # xxhash library code
82
+ system("mkdir -p #{extdir}/include/xxhash")
83
+ system("cp -a #{libdir}/vendor/xxhash/*.h #{extdir}/include")
84
+ system("cp -a #{libdir}/vendor/xxhash/*.h #{extdir}/include/xxhash")
85
+ system("cp -a #{libdir}/vendor/xxhash/*.c #{extdir}/")
86
+ # Other support files
87
+ system("cp -a #{libdir}/testdata/* #{testfilesdir}")
88
+ # Copy back the custom ext files
89
+ system("cp -a #{extbakdir}/pg_query_ruby.{c,sym} #{extbakdir}/extconf.rb #{extdir}")
90
+
91
+ # Generate JSON field name helper (workaround until https://github.com/protocolbuffers/protobuf/pull/8356 is merged)
92
+ str = "module PgQuery\n INTERNAL_PROTO_FIELD_NAME_TO_JSON_NAME = {\n"
93
+ cur_type = nil
94
+ File.read(File.join(libdir, 'protobuf/pg_query.proto')).each_line do |line|
95
+ if line[/^message (\w+)/]
96
+ cur_type = $1
97
+ next
98
+ end
99
+ next unless line[/(repeated )?\w+ (\w+) = \d+( \[json_name="(\w+)"\])?;/]
100
+ str += format(" [%s, :%s] => '%s',\n", cur_type, $2, $4 || $2)
101
+ end
102
+ str += " }\nend\n"
103
+ File.write(File.join(__dir__, 'lib/pg_query/json_field_names.rb'), str)
104
+ end
@@ -1,40 +1,12 @@
1
1
  # rubocop:disable Style/GlobalVars
2
2
 
3
+ require 'digest'
3
4
  require 'mkmf'
4
5
  require 'open-uri'
5
6
 
6
- LIB_PG_QUERY_TAG = '10-1.0.1'.freeze
7
+ $objs = Dir.glob(File.join(__dir__, '*.c')).map { |f| f.gsub('.c', '.o') }
7
8
 
8
- workdir = Dir.pwd
9
- libdir = File.join(workdir, 'libpg_query-' + LIB_PG_QUERY_TAG)
10
- gemdir = File.join(__dir__, '../..')
11
- libfile = libdir + '/libpg_query.a'
12
-
13
- unless File.exist?("#{workdir}/libpg_query.tar.gz")
14
- File.open("#{workdir}/libpg_query.tar.gz", 'wb') do |target_file|
15
- open('https://codeload.github.com/lfittl/libpg_query/tar.gz/' + LIB_PG_QUERY_TAG, 'rb') do |read_file|
16
- target_file.write(read_file.read)
17
- end
18
- end
19
- end
20
-
21
- unless Dir.exist?(libdir)
22
- system("tar -xf #{workdir}/libpg_query.tar.gz") || raise('ERROR')
23
- end
24
-
25
- unless Dir.exist?(libfile)
26
- # Build libpg_query (and parts of PostgreSQL)
27
- system("cd #{libdir}; #{ENV['MAKE'] || (RUBY_PLATFORM =~ /bsd/ ? 'gmake' : 'make')} build")
28
- end
29
-
30
- # Copy test files (this intentionally overwrites existing files!)
31
- system("cp #{libdir}/testdata/* #{gemdir}/spec/files/")
32
-
33
- $objs = ['pg_query_ruby.o']
34
-
35
- $LOCAL_LIBS << '-lpg_query'
36
- $LIBPATH << libdir
37
- $CFLAGS << " -I #{libdir} -O3 -Wall -fno-strict-aliasing -fwrapv -g"
9
+ $CFLAGS << " -I#{File.join(__dir__, 'include')} -O3 -Wall -fno-strict-aliasing -fwrapv -fstack-protector -Wno-unused-function -Wno-unused-variable -g"
38
10
 
39
11
  SYMFILE = File.join(__dir__, 'pg_query_ruby.sym')
40
12
  if RUBY_PLATFORM =~ /darwin/
File without changes
@@ -0,0 +1,246 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * amapi.h
4
+ * API for Postgres index access methods.
5
+ *
6
+ * Copyright (c) 2015-2020, PostgreSQL Global Development Group
7
+ *
8
+ * src/include/access/amapi.h
9
+ *
10
+ *-------------------------------------------------------------------------
11
+ */
12
+ #ifndef AMAPI_H
13
+ #define AMAPI_H
14
+
15
+ #include "access/genam.h"
16
+
17
+ /*
18
+ * We don't wish to include planner header files here, since most of an index
19
+ * AM's implementation isn't concerned with those data structures. To allow
20
+ * declaring amcostestimate_function here, use forward struct references.
21
+ */
22
+ struct PlannerInfo;
23
+ struct IndexPath;
24
+
25
+ /* Likewise, this file shouldn't depend on execnodes.h. */
26
+ struct IndexInfo;
27
+
28
+
29
+ /*
30
+ * Properties for amproperty API. This list covers properties known to the
31
+ * core code, but an index AM can define its own properties, by matching the
32
+ * string property name.
33
+ */
34
+ typedef enum IndexAMProperty
35
+ {
36
+ AMPROP_UNKNOWN = 0, /* anything not known to core code */
37
+ AMPROP_ASC, /* column properties */
38
+ AMPROP_DESC,
39
+ AMPROP_NULLS_FIRST,
40
+ AMPROP_NULLS_LAST,
41
+ AMPROP_ORDERABLE,
42
+ AMPROP_DISTANCE_ORDERABLE,
43
+ AMPROP_RETURNABLE,
44
+ AMPROP_SEARCH_ARRAY,
45
+ AMPROP_SEARCH_NULLS,
46
+ AMPROP_CLUSTERABLE, /* index properties */
47
+ AMPROP_INDEX_SCAN,
48
+ AMPROP_BITMAP_SCAN,
49
+ AMPROP_BACKWARD_SCAN,
50
+ AMPROP_CAN_ORDER, /* AM properties */
51
+ AMPROP_CAN_UNIQUE,
52
+ AMPROP_CAN_MULTI_COL,
53
+ AMPROP_CAN_EXCLUDE,
54
+ AMPROP_CAN_INCLUDE
55
+ } IndexAMProperty;
56
+
57
+
58
+ /*
59
+ * Callback function signatures --- see indexam.sgml for more info.
60
+ */
61
+
62
+ /* build new index */
63
+ typedef IndexBuildResult *(*ambuild_function) (Relation heapRelation,
64
+ Relation indexRelation,
65
+ struct IndexInfo *indexInfo);
66
+
67
+ /* build empty index */
68
+ typedef void (*ambuildempty_function) (Relation indexRelation);
69
+
70
+ /* insert this tuple */
71
+ typedef bool (*aminsert_function) (Relation indexRelation,
72
+ Datum *values,
73
+ bool *isnull,
74
+ ItemPointer heap_tid,
75
+ Relation heapRelation,
76
+ IndexUniqueCheck checkUnique,
77
+ struct IndexInfo *indexInfo);
78
+
79
+ /* bulk delete */
80
+ typedef IndexBulkDeleteResult *(*ambulkdelete_function) (IndexVacuumInfo *info,
81
+ IndexBulkDeleteResult *stats,
82
+ IndexBulkDeleteCallback callback,
83
+ void *callback_state);
84
+
85
+ /* post-VACUUM cleanup */
86
+ typedef IndexBulkDeleteResult *(*amvacuumcleanup_function) (IndexVacuumInfo *info,
87
+ IndexBulkDeleteResult *stats);
88
+
89
+ /* can indexscan return IndexTuples? */
90
+ typedef bool (*amcanreturn_function) (Relation indexRelation, int attno);
91
+
92
+ /* estimate cost of an indexscan */
93
+ typedef void (*amcostestimate_function) (struct PlannerInfo *root,
94
+ struct IndexPath *path,
95
+ double loop_count,
96
+ Cost *indexStartupCost,
97
+ Cost *indexTotalCost,
98
+ Selectivity *indexSelectivity,
99
+ double *indexCorrelation,
100
+ double *indexPages);
101
+
102
+ /* parse index reloptions */
103
+ typedef bytea *(*amoptions_function) (Datum reloptions,
104
+ bool validate);
105
+
106
+ /* report AM, index, or index column property */
107
+ typedef bool (*amproperty_function) (Oid index_oid, int attno,
108
+ IndexAMProperty prop, const char *propname,
109
+ bool *res, bool *isnull);
110
+
111
+ /* name of phase as used in progress reporting */
112
+ typedef char *(*ambuildphasename_function) (int64 phasenum);
113
+
114
+ /* validate definition of an opclass for this AM */
115
+ typedef bool (*amvalidate_function) (Oid opclassoid);
116
+
117
+ /* prepare for index scan */
118
+ typedef IndexScanDesc (*ambeginscan_function) (Relation indexRelation,
119
+ int nkeys,
120
+ int norderbys);
121
+
122
+ /* (re)start index scan */
123
+ typedef void (*amrescan_function) (IndexScanDesc scan,
124
+ ScanKey keys,
125
+ int nkeys,
126
+ ScanKey orderbys,
127
+ int norderbys);
128
+
129
+ /* next valid tuple */
130
+ typedef bool (*amgettuple_function) (IndexScanDesc scan,
131
+ ScanDirection direction);
132
+
133
+ /* fetch all valid tuples */
134
+ typedef int64 (*amgetbitmap_function) (IndexScanDesc scan,
135
+ TIDBitmap *tbm);
136
+
137
+ /* end index scan */
138
+ typedef void (*amendscan_function) (IndexScanDesc scan);
139
+
140
+ /* mark current scan position */
141
+ typedef void (*ammarkpos_function) (IndexScanDesc scan);
142
+
143
+ /* restore marked scan position */
144
+ typedef void (*amrestrpos_function) (IndexScanDesc scan);
145
+
146
+ /*
147
+ * Callback function signatures - for parallel index scans.
148
+ */
149
+
150
+ /* estimate size of parallel scan descriptor */
151
+ typedef Size (*amestimateparallelscan_function) (void);
152
+
153
+ /* prepare for parallel index scan */
154
+ typedef void (*aminitparallelscan_function) (void *target);
155
+
156
+ /* (re)start parallel index scan */
157
+ typedef void (*amparallelrescan_function) (IndexScanDesc scan);
158
+
159
+ /*
160
+ * API struct for an index AM. Note this must be stored in a single palloc'd
161
+ * chunk of memory.
162
+ */
163
+ typedef struct IndexAmRoutine
164
+ {
165
+ NodeTag type;
166
+
167
+ /*
168
+ * Total number of strategies (operators) by which we can traverse/search
169
+ * this AM. Zero if AM does not have a fixed set of strategy assignments.
170
+ */
171
+ uint16 amstrategies;
172
+ /* total number of support functions that this AM uses */
173
+ uint16 amsupport;
174
+ /* opclass options support function number or 0 */
175
+ uint16 amoptsprocnum;
176
+ /* does AM support ORDER BY indexed column's value? */
177
+ bool amcanorder;
178
+ /* does AM support ORDER BY result of an operator on indexed column? */
179
+ bool amcanorderbyop;
180
+ /* does AM support backward scanning? */
181
+ bool amcanbackward;
182
+ /* does AM support UNIQUE indexes? */
183
+ bool amcanunique;
184
+ /* does AM support multi-column indexes? */
185
+ bool amcanmulticol;
186
+ /* does AM require scans to have a constraint on the first index column? */
187
+ bool amoptionalkey;
188
+ /* does AM handle ScalarArrayOpExpr quals? */
189
+ bool amsearcharray;
190
+ /* does AM handle IS NULL/IS NOT NULL quals? */
191
+ bool amsearchnulls;
192
+ /* can index storage data type differ from column data type? */
193
+ bool amstorage;
194
+ /* can an index of this type be clustered on? */
195
+ bool amclusterable;
196
+ /* does AM handle predicate locks? */
197
+ bool ampredlocks;
198
+ /* does AM support parallel scan? */
199
+ bool amcanparallel;
200
+ /* does AM support columns included with clause INCLUDE? */
201
+ bool amcaninclude;
202
+ /* does AM use maintenance_work_mem? */
203
+ bool amusemaintenanceworkmem;
204
+ /* OR of parallel vacuum flags. See vacuum.h for flags. */
205
+ uint8 amparallelvacuumoptions;
206
+ /* type of data stored in index, or InvalidOid if variable */
207
+ Oid amkeytype;
208
+
209
+ /*
210
+ * If you add new properties to either the above or the below lists, then
211
+ * they should also (usually) be exposed via the property API (see
212
+ * IndexAMProperty at the top of the file, and utils/adt/amutils.c).
213
+ */
214
+
215
+ /* interface functions */
216
+ ambuild_function ambuild;
217
+ ambuildempty_function ambuildempty;
218
+ aminsert_function aminsert;
219
+ ambulkdelete_function ambulkdelete;
220
+ amvacuumcleanup_function amvacuumcleanup;
221
+ amcanreturn_function amcanreturn; /* can be NULL */
222
+ amcostestimate_function amcostestimate;
223
+ amoptions_function amoptions;
224
+ amproperty_function amproperty; /* can be NULL */
225
+ ambuildphasename_function ambuildphasename; /* can be NULL */
226
+ amvalidate_function amvalidate;
227
+ ambeginscan_function ambeginscan;
228
+ amrescan_function amrescan;
229
+ amgettuple_function amgettuple; /* can be NULL */
230
+ amgetbitmap_function amgetbitmap; /* can be NULL */
231
+ amendscan_function amendscan;
232
+ ammarkpos_function ammarkpos; /* can be NULL */
233
+ amrestrpos_function amrestrpos; /* can be NULL */
234
+
235
+ /* interface functions to support parallel index scans */
236
+ amestimateparallelscan_function amestimateparallelscan; /* can be NULL */
237
+ aminitparallelscan_function aminitparallelscan; /* can be NULL */
238
+ amparallelrescan_function amparallelrescan; /* can be NULL */
239
+ } IndexAmRoutine;
240
+
241
+
242
+ /* Functions in access/index/amapi.c */
243
+ extern IndexAmRoutine *GetIndexAmRoutine(Oid amhandler);
244
+ extern IndexAmRoutine *GetIndexAmRoutineByAmId(Oid amoid, bool noerror);
245
+
246
+ #endif /* AMAPI_H */
@@ -0,0 +1,52 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * attmap.h
4
+ * Definitions for PostgreSQL attribute mappings
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/access/attmap.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef ATTMAP_H
15
+ #define ATTMAP_H
16
+
17
+ #include "access/attnum.h"
18
+ #include "access/tupdesc.h"
19
+
20
+ /*
21
+ * Attribute mapping structure
22
+ *
23
+ * This maps attribute numbers between a pair of relations, designated
24
+ * 'input' and 'output' (most typically inheritance parent and child
25
+ * relations), whose common columns may have different attribute numbers.
26
+ * Such difference may arise due to the columns being ordered differently
27
+ * in the two relations or the two relations having dropped columns at
28
+ * different positions.
29
+ *
30
+ * 'maplen' is set to the number of attributes of the 'output' relation,
31
+ * taking into account any of its dropped attributes, with the corresponding
32
+ * elements of the 'attnums' array set to 0.
33
+ */
34
+ typedef struct AttrMap
35
+ {
36
+ AttrNumber *attnums;
37
+ int maplen;
38
+ } AttrMap;
39
+
40
+ extern AttrMap *make_attrmap(int maplen);
41
+ extern void free_attrmap(AttrMap *map);
42
+
43
+ /* Conversion routines to build mappings */
44
+ extern AttrMap *build_attrmap_by_name(TupleDesc indesc,
45
+ TupleDesc outdesc);
46
+ extern AttrMap *build_attrmap_by_name_if_req(TupleDesc indesc,
47
+ TupleDesc outdesc);
48
+ extern AttrMap *build_attrmap_by_position(TupleDesc indesc,
49
+ TupleDesc outdesc,
50
+ const char *msg);
51
+
52
+ #endif /* ATTMAP_H */
@@ -0,0 +1,64 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * attnum.h
4
+ * POSTGRES attribute number definitions.
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/access/attnum.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef ATTNUM_H
15
+ #define ATTNUM_H
16
+
17
+
18
+ /*
19
+ * user defined attribute numbers start at 1. -ay 2/95
20
+ */
21
+ typedef int16 AttrNumber;
22
+
23
+ #define InvalidAttrNumber 0
24
+ #define MaxAttrNumber 32767
25
+
26
+ /* ----------------
27
+ * support macros
28
+ * ----------------
29
+ */
30
+ /*
31
+ * AttributeNumberIsValid
32
+ * True iff the attribute number is valid.
33
+ */
34
+ #define AttributeNumberIsValid(attributeNumber) \
35
+ ((bool) ((attributeNumber) != InvalidAttrNumber))
36
+
37
+ /*
38
+ * AttrNumberIsForUserDefinedAttr
39
+ * True iff the attribute number corresponds to an user defined attribute.
40
+ */
41
+ #define AttrNumberIsForUserDefinedAttr(attributeNumber) \
42
+ ((bool) ((attributeNumber) > 0))
43
+
44
+ /*
45
+ * AttrNumberGetAttrOffset
46
+ * Returns the attribute offset for an attribute number.
47
+ *
48
+ * Note:
49
+ * Assumes the attribute number is for a user defined attribute.
50
+ */
51
+ #define AttrNumberGetAttrOffset(attNum) \
52
+ ( \
53
+ AssertMacro(AttrNumberIsForUserDefinedAttr(attNum)), \
54
+ ((attNum) - 1) \
55
+ )
56
+
57
+ /*
58
+ * AttrOffsetGetAttrNumber
59
+ * Returns the attribute number for an attribute offset.
60
+ */
61
+ #define AttrOffsetGetAttrNumber(attributeOffset) \
62
+ ((AttrNumber) (1 + (attributeOffset)))
63
+
64
+ #endif /* ATTNUM_H */