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,776 @@
1
+ /*--------------------------------------------------------------------
2
+ * Symbols referenced in this file:
3
+ * - whereToSendOutput
4
+ * - debug_query_string
5
+ * - ProcessInterrupts
6
+ * - check_stack_depth
7
+ * - stack_is_too_deep
8
+ * - stack_base_ptr
9
+ * - max_stack_depth_bytes
10
+ * - max_stack_depth
11
+ *--------------------------------------------------------------------
12
+ */
13
+
14
+ /*-------------------------------------------------------------------------
15
+ *
16
+ * postgres.c
17
+ * POSTGRES C Backend Interface
18
+ *
19
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
20
+ * Portions Copyright (c) 1994, Regents of the University of California
21
+ *
22
+ *
23
+ * IDENTIFICATION
24
+ * src/backend/tcop/postgres.c
25
+ *
26
+ * NOTES
27
+ * this is the "main" module of the postgres backend and
28
+ * hence the main module of the "traffic cop".
29
+ *
30
+ *-------------------------------------------------------------------------
31
+ */
32
+
33
+ #include "postgres.h"
34
+
35
+ #include <fcntl.h>
36
+ #include <limits.h>
37
+ #include <signal.h>
38
+ #include <unistd.h>
39
+ #include <sys/socket.h>
40
+ #ifdef HAVE_SYS_SELECT_H
41
+ #include <sys/select.h>
42
+ #endif
43
+ #ifdef HAVE_SYS_RESOURCE_H
44
+ #include <sys/time.h>
45
+ #include <sys/resource.h>
46
+ #endif
47
+
48
+ #ifndef HAVE_GETRUSAGE
49
+ #include "rusagestub.h"
50
+ #endif
51
+
52
+ #include "access/parallel.h"
53
+ #include "access/printtup.h"
54
+ #include "access/xact.h"
55
+ #include "catalog/pg_type.h"
56
+ #include "commands/async.h"
57
+ #include "commands/prepare.h"
58
+ #include "executor/spi.h"
59
+ #include "jit/jit.h"
60
+ #include "libpq/libpq.h"
61
+ #include "libpq/pqformat.h"
62
+ #include "libpq/pqsignal.h"
63
+ #include "mb/pg_wchar.h"
64
+ #include "mb/stringinfo_mb.h"
65
+ #include "miscadmin.h"
66
+ #include "nodes/print.h"
67
+ #include "optimizer/optimizer.h"
68
+ #include "parser/analyze.h"
69
+ #include "parser/parser.h"
70
+ #include "pg_getopt.h"
71
+ #include "pg_trace.h"
72
+ #include "pgstat.h"
73
+ #include "postmaster/autovacuum.h"
74
+ #include "postmaster/interrupt.h"
75
+ #include "postmaster/postmaster.h"
76
+ #include "replication/logicallauncher.h"
77
+ #include "replication/logicalworker.h"
78
+ #include "replication/slot.h"
79
+ #include "replication/walsender.h"
80
+ #include "rewrite/rewriteHandler.h"
81
+ #include "storage/bufmgr.h"
82
+ #include "storage/ipc.h"
83
+ #include "storage/proc.h"
84
+ #include "storage/procsignal.h"
85
+ #include "storage/sinval.h"
86
+ #include "tcop/fastpath.h"
87
+ #include "tcop/pquery.h"
88
+ #include "tcop/tcopprot.h"
89
+ #include "tcop/utility.h"
90
+ #include "utils/lsyscache.h"
91
+ #include "utils/memutils.h"
92
+ #include "utils/ps_status.h"
93
+ #include "utils/snapmgr.h"
94
+ #include "utils/timeout.h"
95
+ #include "utils/timestamp.h"
96
+
97
+ /* ----------------
98
+ * global variables
99
+ * ----------------
100
+ */
101
+ __thread const char *debug_query_string;
102
+ /* client-supplied query string */
103
+
104
+ /* Note: whereToSendOutput is initialized for the bootstrap/standalone case */
105
+ __thread CommandDest whereToSendOutput = DestDebug;
106
+
107
+
108
+ /* flag for logging end of session */
109
+
110
+
111
+
112
+
113
+ /* GUC variable for maximum stack depth (measured in kilobytes) */
114
+ __thread int max_stack_depth = 100;
115
+
116
+
117
+ /* wait N seconds to allow attach from a debugger */
118
+
119
+
120
+
121
+
122
+ /* ----------------
123
+ * private variables
124
+ * ----------------
125
+ */
126
+
127
+ /* max_stack_depth converted to bytes for speed of checking */
128
+ static __thread long max_stack_depth_bytes = 100 * 1024L;
129
+
130
+
131
+ /*
132
+ * Stack base pointer -- initialized by PostmasterMain and inherited by
133
+ * subprocesses. This is not static because old versions of PL/Java modify
134
+ * it directly. Newer versions use set_stack_base(), but we want to stay
135
+ * binary-compatible for the time being.
136
+ */
137
+ __thread char *stack_base_ptr = NULL;
138
+
139
+
140
+ /*
141
+ * On IA64 we also have to remember the register stack base.
142
+ */
143
+ #if defined(__ia64__) || defined(__ia64)
144
+ char *register_stack_base_ptr = NULL;
145
+ #endif
146
+
147
+ /*
148
+ * Flag to keep track of whether we have started a transaction.
149
+ * For extended query protocol this has to be remembered across messages.
150
+ */
151
+
152
+
153
+ /*
154
+ * Flag to indicate that we are doing the outer loop's read-from-client,
155
+ * as opposed to any random read from client that might happen within
156
+ * commands like COPY FROM STDIN.
157
+ */
158
+
159
+
160
+ /*
161
+ * Flags to implement skip-till-Sync-after-error behavior for messages of
162
+ * the extended query protocol.
163
+ */
164
+
165
+
166
+
167
+ /*
168
+ * If an unnamed prepared statement exists, it's stored here.
169
+ * We keep it separate from the hashtable kept by commands/prepare.c
170
+ * in order to reduce overhead for short-lived queries.
171
+ */
172
+
173
+
174
+ /* assorted command-line switches */
175
+ /* -D switch */
176
+ /* -E switch */
177
+ /* -j switch */
178
+
179
+ /* whether or not, and why, we were canceled by conflict with recovery */
180
+
181
+
182
+
183
+
184
+ /* reused buffer to pass to SendRowDescriptionMessage() */
185
+
186
+
187
+
188
+ /* ----------------------------------------------------------------
189
+ * decls for routines only used in this file
190
+ * ----------------------------------------------------------------
191
+ */
192
+ static int InteractiveBackend(StringInfo inBuf);
193
+ static int interactive_getc(void);
194
+ static int SocketBackend(StringInfo inBuf);
195
+ static int ReadCommand(StringInfo inBuf);
196
+ static void forbidden_in_wal_sender(char firstchar);
197
+ static List *pg_rewrite_query(Query *query);
198
+ static bool check_log_statement(List *stmt_list);
199
+ static int errdetail_execute(List *raw_parsetree_list);
200
+ static int errdetail_params(ParamListInfo params);
201
+ static int errdetail_abort(void);
202
+ static int errdetail_recovery_conflict(void);
203
+ static void start_xact_command(void);
204
+ static void finish_xact_command(void);
205
+ static bool IsTransactionExitStmt(Node *parsetree);
206
+ static bool IsTransactionExitStmtList(List *pstmts);
207
+ static bool IsTransactionStmtList(List *pstmts);
208
+ static void drop_unnamed_stmt(void);
209
+ static void log_disconnections(int code, Datum arg);
210
+ static void enable_statement_timeout(void);
211
+ static void disable_statement_timeout(void);
212
+
213
+
214
+ /* ----------------------------------------------------------------
215
+ * routines to obtain user input
216
+ * ----------------------------------------------------------------
217
+ */
218
+
219
+ /* ----------------
220
+ * InteractiveBackend() is called for user interactive connections
221
+ *
222
+ * the string entered by the user is placed in its parameter inBuf,
223
+ * and we act like a Q message was received.
224
+ *
225
+ * EOF is returned if end-of-file input is seen; time to shut down.
226
+ * ----------------
227
+ */
228
+
229
+
230
+
231
+ /*
232
+ * interactive_getc -- collect one character from stdin
233
+ *
234
+ * Even though we are not reading from a "client" process, we still want to
235
+ * respond to signals, particularly SIGTERM/SIGQUIT.
236
+ */
237
+
238
+
239
+ /* ----------------
240
+ * SocketBackend() Is called for frontend-backend connections
241
+ *
242
+ * Returns the message type code, and loads message body data into inBuf.
243
+ *
244
+ * EOF is returned if the connection is lost.
245
+ * ----------------
246
+ */
247
+
248
+
249
+ /* ----------------
250
+ * ReadCommand reads a command from either the frontend or
251
+ * standard input, places it in inBuf, and returns the
252
+ * message type code (first byte of the message).
253
+ * EOF is returned if end of file.
254
+ * ----------------
255
+ */
256
+
257
+
258
+ /*
259
+ * ProcessClientReadInterrupt() - Process interrupts specific to client reads
260
+ *
261
+ * This is called just before and after low-level reads.
262
+ * 'blocked' is true if no data was available to read and we plan to retry,
263
+ * false if about to read or done reading.
264
+ *
265
+ * Must preserve errno!
266
+ */
267
+
268
+
269
+ /*
270
+ * ProcessClientWriteInterrupt() - Process interrupts specific to client writes
271
+ *
272
+ * This is called just before and after low-level writes.
273
+ * 'blocked' is true if no data could be written and we plan to retry,
274
+ * false if about to write or done writing.
275
+ *
276
+ * Must preserve errno!
277
+ */
278
+
279
+
280
+ /*
281
+ * Do raw parsing (only).
282
+ *
283
+ * A list of parsetrees (RawStmt nodes) is returned, since there might be
284
+ * multiple commands in the given string.
285
+ *
286
+ * NOTE: for interactive queries, it is important to keep this routine
287
+ * separate from the analysis & rewrite stages. Analysis and rewriting
288
+ * cannot be done in an aborted transaction, since they require access to
289
+ * database tables. So, we rely on the raw parser to determine whether
290
+ * we've seen a COMMIT or ABORT command; when we are in abort state, other
291
+ * commands are not processed any further than the raw parse stage.
292
+ */
293
+ #ifdef COPY_PARSE_PLAN_TREES
294
+ #endif
295
+
296
+ /*
297
+ * Given a raw parsetree (gram.y output), and optionally information about
298
+ * types of parameter symbols ($n), perform parse analysis and rule rewriting.
299
+ *
300
+ * A list of Query nodes is returned, since either the analyzer or the
301
+ * rewriter might expand one query to several.
302
+ *
303
+ * NOTE: for reasons mentioned above, this must be separate from raw parsing.
304
+ */
305
+
306
+
307
+ /*
308
+ * Do parse analysis and rewriting. This is the same as pg_analyze_and_rewrite
309
+ * except that external-parameter resolution is determined by parser callback
310
+ * hooks instead of a fixed list of parameter datatypes.
311
+ */
312
+
313
+
314
+ /*
315
+ * Perform rewriting of a query produced by parse analysis.
316
+ *
317
+ * Note: query must just have come from the parser, because we do not do
318
+ * AcquireRewriteLocks() on it.
319
+ */
320
+ #ifdef COPY_PARSE_PLAN_TREES
321
+ #endif
322
+ #ifdef WRITE_READ_PARSE_PLAN_TREES
323
+ #endif
324
+
325
+
326
+ /*
327
+ * Generate a plan for a single already-rewritten query.
328
+ * This is a thin wrapper around planner() and takes the same parameters.
329
+ */
330
+ #ifdef COPY_PARSE_PLAN_TREES
331
+ #ifdef NOT_USED
332
+ #endif
333
+ #endif
334
+ #ifdef WRITE_READ_PARSE_PLAN_TREES
335
+ #ifdef NOT_USED
336
+ #endif
337
+ #endif
338
+
339
+ /*
340
+ * Generate plans for a list of already-rewritten queries.
341
+ *
342
+ * For normal optimizable statements, invoke the planner. For utility
343
+ * statements, just make a wrapper PlannedStmt node.
344
+ *
345
+ * The result is a list of PlannedStmt nodes.
346
+ */
347
+
348
+
349
+
350
+ /*
351
+ * exec_simple_query
352
+ *
353
+ * Execute a "simple Query" protocol message.
354
+ */
355
+
356
+
357
+ /*
358
+ * exec_parse_message
359
+ *
360
+ * Execute a "Parse" protocol message.
361
+ */
362
+
363
+
364
+ /*
365
+ * exec_bind_message
366
+ *
367
+ * Process a "Bind" message to create a portal from a prepared statement
368
+ */
369
+
370
+
371
+ /*
372
+ * exec_execute_message
373
+ *
374
+ * Process an "Execute" message for a portal
375
+ */
376
+
377
+
378
+ /*
379
+ * check_log_statement
380
+ * Determine whether command should be logged because of log_statement
381
+ *
382
+ * stmt_list can be either raw grammar output or a list of planned
383
+ * statements
384
+ */
385
+
386
+
387
+ /*
388
+ * check_log_duration
389
+ * Determine whether current command's duration should be logged
390
+ * We also check if this statement in this transaction must be logged
391
+ * (regardless of its duration).
392
+ *
393
+ * Returns:
394
+ * 0 if no logging is needed
395
+ * 1 if just the duration should be logged
396
+ * 2 if duration and query details should be logged
397
+ *
398
+ * If logging is needed, the duration in msec is formatted into msec_str[],
399
+ * which must be a 32-byte buffer.
400
+ *
401
+ * was_logged should be true if caller already logged query details (this
402
+ * essentially prevents 2 from being returned).
403
+ */
404
+
405
+
406
+ /*
407
+ * errdetail_execute
408
+ *
409
+ * Add an errdetail() line showing the query referenced by an EXECUTE, if any.
410
+ * The argument is the raw parsetree list.
411
+ */
412
+
413
+
414
+ /*
415
+ * errdetail_params
416
+ *
417
+ * Add an errdetail() line showing bind-parameter data, if available.
418
+ * Note that this is only used for statement logging, so it is controlled
419
+ * by log_parameter_max_length not log_parameter_max_length_on_error.
420
+ */
421
+
422
+
423
+ /*
424
+ * errdetail_abort
425
+ *
426
+ * Add an errdetail() line showing abort reason, if any.
427
+ */
428
+
429
+
430
+ /*
431
+ * errdetail_recovery_conflict
432
+ *
433
+ * Add an errdetail() line showing conflict source.
434
+ */
435
+
436
+
437
+ /*
438
+ * exec_describe_statement_message
439
+ *
440
+ * Process a "Describe" message for a prepared statement
441
+ */
442
+
443
+
444
+ /*
445
+ * exec_describe_portal_message
446
+ *
447
+ * Process a "Describe" message for a portal
448
+ */
449
+
450
+
451
+
452
+ /*
453
+ * Convenience routines for starting/committing a single command.
454
+ */
455
+
456
+
457
+ #ifdef MEMORY_CONTEXT_CHECKING
458
+ #endif
459
+ #ifdef SHOW_MEMORY_STATS
460
+ #endif
461
+
462
+
463
+ /*
464
+ * Convenience routines for checking whether a statement is one of the
465
+ * ones that we allow in transaction-aborted state.
466
+ */
467
+
468
+ /* Test a bare parsetree */
469
+
470
+
471
+ /* Test a list that contains PlannedStmt nodes */
472
+
473
+
474
+ /* Test a list that contains PlannedStmt nodes */
475
+
476
+
477
+ /* Release any existing unnamed prepared statement */
478
+
479
+
480
+
481
+ /* --------------------------------
482
+ * signal handler routines used in PostgresMain()
483
+ * --------------------------------
484
+ */
485
+
486
+ /*
487
+ * quickdie() occurs when signaled SIGQUIT by the postmaster.
488
+ *
489
+ * Some backend has bought the farm,
490
+ * so we need to stop what we're doing and exit.
491
+ */
492
+
493
+
494
+ /*
495
+ * Shutdown signal from postmaster: abort transaction and exit
496
+ * at soonest convenient time
497
+ */
498
+
499
+
500
+ /*
501
+ * Query-cancel signal from postmaster: abort current transaction
502
+ * at soonest convenient time
503
+ */
504
+
505
+
506
+ /* signal handler for floating point exception */
507
+
508
+
509
+ /*
510
+ * RecoveryConflictInterrupt: out-of-line portion of recovery conflict
511
+ * handling following receipt of SIGUSR1. Designed to be similar to die()
512
+ * and StatementCancelHandler(). Called only by a normal user backend
513
+ * that begins a transaction during recovery.
514
+ */
515
+
516
+
517
+ /*
518
+ * ProcessInterrupts: out-of-line portion of CHECK_FOR_INTERRUPTS() macro
519
+ *
520
+ * If an interrupt condition is pending, and it's safe to service it,
521
+ * then clear the flag and accept the interrupt. Called only when
522
+ * InterruptPending is true.
523
+ */
524
+ void ProcessInterrupts(void) {}
525
+
526
+
527
+
528
+ /*
529
+ * IA64-specific code to fetch the AR.BSP register for stack depth checks.
530
+ *
531
+ * We currently support gcc, icc, and HP-UX's native compiler here.
532
+ *
533
+ * Note: while icc accepts gcc asm blocks on x86[_64], this is not true on
534
+ * ia64 (at least not in icc versions before 12.x). So we have to carry a
535
+ * separate implementation for it.
536
+ */
537
+ #if defined(__ia64__) || defined(__ia64)
538
+
539
+ #if defined(__hpux) && !defined(__GNUC__) && !defined(__INTEL_COMPILER)
540
+ /* Assume it's HP-UX native compiler */
541
+ #include <ia64/sys/inline.h>
542
+ #define ia64_get_bsp() ((char *) (_Asm_mov_from_ar(_AREG_BSP, _NO_FENCE)))
543
+ #elif defined(__INTEL_COMPILER)
544
+ /* icc */
545
+ #include <asm/ia64regs.h>
546
+ #define ia64_get_bsp() ((char *) __getReg(_IA64_REG_AR_BSP))
547
+ #else
548
+ /* gcc */
549
+ static __inline__ char *
550
+ ia64_get_bsp(void)
551
+ {
552
+ char *ret;
553
+
554
+ /* the ;; is a "stop", seems to be required before fetching BSP */
555
+ __asm__ __volatile__(
556
+ ";;\n"
557
+ " mov %0=ar.bsp \n"
558
+ : "=r"(ret));
559
+
560
+ return ret;
561
+ }
562
+ #endif
563
+ #endif /* IA64 */
564
+
565
+
566
+ /*
567
+ * set_stack_base: set up reference point for stack depth checking
568
+ *
569
+ * Returns the old reference point, if any.
570
+ */
571
+ #if defined(__ia64__) || defined(__ia64)
572
+ #else
573
+ #endif
574
+ #if defined(__ia64__) || defined(__ia64)
575
+ #endif
576
+
577
+ /*
578
+ * restore_stack_base: restore reference point for stack depth checking
579
+ *
580
+ * This can be used after set_stack_base() to restore the old value. This
581
+ * is currently only used in PL/Java. When PL/Java calls a backend function
582
+ * from different thread, the thread's stack is at a different location than
583
+ * the main thread's stack, so it sets the base pointer before the call, and
584
+ * restores it afterwards.
585
+ */
586
+ #if defined(__ia64__) || defined(__ia64)
587
+ #else
588
+ #endif
589
+
590
+ /*
591
+ * check_stack_depth/stack_is_too_deep: check for excessively deep recursion
592
+ *
593
+ * This should be called someplace in any recursive routine that might possibly
594
+ * recurse deep enough to overflow the stack. Most Unixen treat stack
595
+ * overflow as an unrecoverable SIGSEGV, so we want to error out ourselves
596
+ * before hitting the hardware limit.
597
+ *
598
+ * check_stack_depth() just throws an error summarily. stack_is_too_deep()
599
+ * can be used by code that wants to handle the error condition itself.
600
+ */
601
+ void
602
+ check_stack_depth(void)
603
+ {
604
+ if (stack_is_too_deep())
605
+ {
606
+ ereport(ERROR,
607
+ (errcode(ERRCODE_STATEMENT_TOO_COMPLEX),
608
+ errmsg("stack depth limit exceeded"),
609
+ errhint("Increase the configuration parameter \"max_stack_depth\" (currently %dkB), "
610
+ "after ensuring the platform's stack depth limit is adequate.",
611
+ max_stack_depth)));
612
+ }
613
+ }
614
+
615
+ bool
616
+ stack_is_too_deep(void)
617
+ {
618
+ char stack_top_loc;
619
+ long stack_depth;
620
+
621
+ /*
622
+ * Compute distance from reference point to my local variables
623
+ */
624
+ stack_depth = (long) (stack_base_ptr - &stack_top_loc);
625
+
626
+ /*
627
+ * Take abs value, since stacks grow up on some machines, down on others
628
+ */
629
+ if (stack_depth < 0)
630
+ stack_depth = -stack_depth;
631
+
632
+ /*
633
+ * Trouble?
634
+ *
635
+ * The test on stack_base_ptr prevents us from erroring out if called
636
+ * during process setup or in a non-backend process. Logically it should
637
+ * be done first, but putting it here avoids wasting cycles during normal
638
+ * cases.
639
+ */
640
+ if (stack_depth > max_stack_depth_bytes &&
641
+ stack_base_ptr != NULL)
642
+ return true;
643
+
644
+ /*
645
+ * On IA64 there is a separate "register" stack that requires its own
646
+ * independent check. For this, we have to measure the change in the
647
+ * "BSP" pointer from PostgresMain to here. Logic is just as above,
648
+ * except that we know IA64's register stack grows up.
649
+ *
650
+ * Note we assume that the same max_stack_depth applies to both stacks.
651
+ */
652
+ #if defined(__ia64__) || defined(__ia64)
653
+ stack_depth = (long) (ia64_get_bsp() - register_stack_base_ptr);
654
+
655
+ if (stack_depth > max_stack_depth_bytes &&
656
+ register_stack_base_ptr != NULL)
657
+ return true;
658
+ #endif /* IA64 */
659
+
660
+ return false;
661
+ }
662
+
663
+ /* GUC check hook for max_stack_depth */
664
+
665
+
666
+ /* GUC assign hook for max_stack_depth */
667
+
668
+
669
+
670
+ /*
671
+ * set_debug_options --- apply "-d N" command line option
672
+ *
673
+ * -d is not quite the same as setting log_min_messages because it enables
674
+ * other output options.
675
+ */
676
+
677
+
678
+
679
+
680
+
681
+
682
+
683
+
684
+
685
+ /* ----------------------------------------------------------------
686
+ * process_postgres_switches
687
+ * Parse command line arguments for PostgresMain
688
+ *
689
+ * This is called twice, once for the "secure" options coming from the
690
+ * postmaster or command line, and once for the "insecure" options coming
691
+ * from the client's startup packet. The latter have the same syntax but
692
+ * may be restricted in what they can do.
693
+ *
694
+ * argv[0] is ignored in either case (it's assumed to be the program name).
695
+ *
696
+ * ctx is PGC_POSTMASTER for secure options, PGC_BACKEND for insecure options
697
+ * coming from the client, or PGC_SU_BACKEND for insecure options coming from
698
+ * a superuser client.
699
+ *
700
+ * If a database name is present in the command line arguments, it's
701
+ * returned into *dbname (this is allowed only if *dbname is initially NULL).
702
+ * ----------------------------------------------------------------
703
+ */
704
+ #ifdef HAVE_INT_OPTERR
705
+ #endif
706
+ #ifdef HAVE_INT_OPTRESET
707
+ #endif
708
+
709
+
710
+ /* ----------------------------------------------------------------
711
+ * PostgresMain
712
+ * postgres main loop -- all backends, interactive or otherwise start here
713
+ *
714
+ * argc/argv are the command line arguments to be used. (When being forked
715
+ * by the postmaster, these are not the original argv array of the process.)
716
+ * dbname is the name of the database to connect to, or NULL if the database
717
+ * name should be extracted from the command line arguments or defaulted.
718
+ * username is the PostgreSQL user name to be used for the session.
719
+ * ----------------------------------------------------------------
720
+ */
721
+ #ifdef EXEC_BACKEND
722
+ #else
723
+ #endif
724
+
725
+ /*
726
+ * Throw an error if we're a WAL sender process.
727
+ *
728
+ * This is used to forbid anything else than simple query protocol messages
729
+ * in a WAL sender process. 'firstchar' specifies what kind of a forbidden
730
+ * message was received, and is used to construct the error message.
731
+ */
732
+
733
+
734
+
735
+ /*
736
+ * Obtain platform stack depth limit (in bytes)
737
+ *
738
+ * Return -1 if unknown
739
+ */
740
+ #if defined(HAVE_GETRLIMIT) && defined(RLIMIT_STACK)
741
+ #else /* no getrlimit */
742
+ #if defined(WIN32) || defined(__CYGWIN__)
743
+ #else /* not windows ... give up */
744
+ #endif
745
+ #endif
746
+
747
+
748
+
749
+
750
+
751
+
752
+
753
+ #if defined(HAVE_GETRUSAGE)
754
+ #if defined(__darwin__)
755
+ #else
756
+ #endif
757
+ #endif /* HAVE_GETRUSAGE */
758
+
759
+ /*
760
+ * on_proc_exit handler to log end of session
761
+ */
762
+
763
+
764
+ /*
765
+ * Start statement timeout timer, if enabled.
766
+ *
767
+ * If there's already a timeout running, don't restart the timer. That
768
+ * enables compromises between accuracy of timeouts and cost of starting a
769
+ * timeout.
770
+ */
771
+
772
+
773
+ /*
774
+ * Disable statement timeout, if active.
775
+ */
776
+