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,524 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * port.h
4
+ * Header for src/port/ compatibility functions.
5
+ *
6
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1994, Regents of the University of California
8
+ *
9
+ * src/include/port.h
10
+ *
11
+ *-------------------------------------------------------------------------
12
+ */
13
+ #ifndef PG_PORT_H
14
+ #define PG_PORT_H
15
+
16
+ #include <ctype.h>
17
+ #include <netdb.h>
18
+ #include <pwd.h>
19
+
20
+ /*
21
+ * Windows has enough specialized port stuff that we push most of it off
22
+ * into another file.
23
+ * Note: Some CYGWIN includes might #define WIN32.
24
+ */
25
+ #if defined(WIN32) && !defined(__CYGWIN__)
26
+ #include "port/win32_port.h"
27
+ #endif
28
+
29
+ /* socket has a different definition on WIN32 */
30
+ #ifndef WIN32
31
+ typedef int pgsocket;
32
+
33
+ #define PGINVALID_SOCKET (-1)
34
+ #else
35
+ typedef SOCKET pgsocket;
36
+
37
+ #define PGINVALID_SOCKET INVALID_SOCKET
38
+ #endif
39
+
40
+ /* non-blocking */
41
+ extern bool pg_set_noblock(pgsocket sock);
42
+ extern bool pg_set_block(pgsocket sock);
43
+
44
+ /* Portable path handling for Unix/Win32 (in path.c) */
45
+
46
+ extern bool has_drive_prefix(const char *filename);
47
+ extern char *first_dir_separator(const char *filename);
48
+ extern char *last_dir_separator(const char *filename);
49
+ extern char *first_path_var_separator(const char *pathlist);
50
+ extern void join_path_components(char *ret_path,
51
+ const char *head, const char *tail);
52
+ extern void canonicalize_path(char *path);
53
+ extern void make_native_path(char *path);
54
+ extern void cleanup_path(char *path);
55
+ extern bool path_contains_parent_reference(const char *path);
56
+ extern bool path_is_relative_and_below_cwd(const char *path);
57
+ extern bool path_is_prefix_of_path(const char *path1, const char *path2);
58
+ extern char *make_absolute_path(const char *path);
59
+ extern const char *get_progname(const char *argv0);
60
+ extern void get_share_path(const char *my_exec_path, char *ret_path);
61
+ extern void get_etc_path(const char *my_exec_path, char *ret_path);
62
+ extern void get_include_path(const char *my_exec_path, char *ret_path);
63
+ extern void get_pkginclude_path(const char *my_exec_path, char *ret_path);
64
+ extern void get_includeserver_path(const char *my_exec_path, char *ret_path);
65
+ extern void get_lib_path(const char *my_exec_path, char *ret_path);
66
+ extern void get_pkglib_path(const char *my_exec_path, char *ret_path);
67
+ extern void get_locale_path(const char *my_exec_path, char *ret_path);
68
+ extern void get_doc_path(const char *my_exec_path, char *ret_path);
69
+ extern void get_html_path(const char *my_exec_path, char *ret_path);
70
+ extern void get_man_path(const char *my_exec_path, char *ret_path);
71
+ extern bool get_home_path(char *ret_path);
72
+ extern void get_parent_directory(char *path);
73
+
74
+ /* common/pgfnames.c */
75
+ extern char **pgfnames(const char *path);
76
+ extern void pgfnames_cleanup(char **filenames);
77
+
78
+ /*
79
+ * is_absolute_path
80
+ *
81
+ * By making this a macro we avoid needing to include path.c in libpq.
82
+ */
83
+ #ifndef WIN32
84
+ #define IS_DIR_SEP(ch) ((ch) == '/')
85
+
86
+ #define is_absolute_path(filename) \
87
+ ( \
88
+ IS_DIR_SEP((filename)[0]) \
89
+ )
90
+ #else
91
+ #define IS_DIR_SEP(ch) ((ch) == '/' || (ch) == '\\')
92
+
93
+ /* See path_is_relative_and_below_cwd() for how we handle 'E:abc'. */
94
+ #define is_absolute_path(filename) \
95
+ ( \
96
+ IS_DIR_SEP((filename)[0]) || \
97
+ (isalpha((unsigned char) ((filename)[0])) && (filename)[1] == ':' && \
98
+ IS_DIR_SEP((filename)[2])) \
99
+ )
100
+ #endif
101
+
102
+ /* Portable locale initialization (in exec.c) */
103
+ extern void set_pglocale_pgservice(const char *argv0, const char *app);
104
+
105
+ /* Portable way to find and execute binaries (in exec.c) */
106
+ extern int find_my_exec(const char *argv0, char *retpath);
107
+ extern int find_other_exec(const char *argv0, const char *target,
108
+ const char *versionstr, char *retpath);
109
+ extern char *pipe_read_line(char *cmd, char *line, int maxsize);
110
+
111
+ /* Doesn't belong here, but this is used with find_other_exec(), so... */
112
+ #define PG_BACKEND_VERSIONSTR "postgres (PostgreSQL) " PG_VERSION "\n"
113
+
114
+
115
+ #if defined(WIN32) || defined(__CYGWIN__)
116
+ #define EXE ".exe"
117
+ #else
118
+ #define EXE ""
119
+ #endif
120
+
121
+ #if defined(WIN32) && !defined(__CYGWIN__)
122
+ #define DEVNULL "nul"
123
+ #else
124
+ #define DEVNULL "/dev/null"
125
+ #endif
126
+
127
+ /* Portable delay handling */
128
+ extern void pg_usleep(long microsec);
129
+
130
+ /* Portable SQL-like case-independent comparisons and conversions */
131
+ extern int pg_strcasecmp(const char *s1, const char *s2);
132
+ extern int pg_strncasecmp(const char *s1, const char *s2, size_t n);
133
+ extern unsigned char pg_toupper(unsigned char ch);
134
+ extern unsigned char pg_tolower(unsigned char ch);
135
+ extern unsigned char pg_ascii_toupper(unsigned char ch);
136
+ extern unsigned char pg_ascii_tolower(unsigned char ch);
137
+
138
+ /*
139
+ * Beginning in v12, we always replace snprintf() and friends with our own
140
+ * implementation. This symbol is no longer consulted by the core code,
141
+ * but keep it defined anyway in case any extensions are looking at it.
142
+ */
143
+ #define USE_REPL_SNPRINTF 1
144
+
145
+ /*
146
+ * Versions of libintl >= 0.13 try to replace printf() and friends with
147
+ * macros to their own versions that understand the %$ format. We do the
148
+ * same, so disable their macros, if they exist.
149
+ */
150
+ #ifdef vsnprintf
151
+ #undef vsnprintf
152
+ #endif
153
+ #ifdef snprintf
154
+ #undef snprintf
155
+ #endif
156
+ #ifdef vsprintf
157
+ #undef vsprintf
158
+ #endif
159
+ #ifdef sprintf
160
+ #undef sprintf
161
+ #endif
162
+ #ifdef vfprintf
163
+ #undef vfprintf
164
+ #endif
165
+ #ifdef fprintf
166
+ #undef fprintf
167
+ #endif
168
+ #ifdef vprintf
169
+ #undef vprintf
170
+ #endif
171
+ #ifdef printf
172
+ #undef printf
173
+ #endif
174
+
175
+ extern int pg_vsnprintf(char *str, size_t count, const char *fmt, va_list args);
176
+ extern int pg_snprintf(char *str, size_t count, const char *fmt,...) pg_attribute_printf(3, 4);
177
+ extern int pg_vsprintf(char *str, const char *fmt, va_list args);
178
+ extern int pg_sprintf(char *str, const char *fmt,...) pg_attribute_printf(2, 3);
179
+ extern int pg_vfprintf(FILE *stream, const char *fmt, va_list args);
180
+ extern int pg_fprintf(FILE *stream, const char *fmt,...) pg_attribute_printf(2, 3);
181
+ extern int pg_vprintf(const char *fmt, va_list args);
182
+ extern int pg_printf(const char *fmt,...) pg_attribute_printf(1, 2);
183
+
184
+ /*
185
+ * We use __VA_ARGS__ for printf to prevent replacing references to
186
+ * the "printf" format archetype in format() attribute declarations.
187
+ * That unfortunately means that taking a function pointer to printf
188
+ * will not do what we'd wish. (If you need to do that, you must name
189
+ * pg_printf explicitly.) For printf's sibling functions, use
190
+ * parameterless macros so that function pointers will work unsurprisingly.
191
+ */
192
+ #define vsnprintf pg_vsnprintf
193
+ #define snprintf pg_snprintf
194
+ #define vsprintf pg_vsprintf
195
+ #define sprintf pg_sprintf
196
+ #define vfprintf pg_vfprintf
197
+ #define fprintf pg_fprintf
198
+ #define vprintf pg_vprintf
199
+ #define printf(...) pg_printf(__VA_ARGS__)
200
+
201
+ /* This is also provided by snprintf.c */
202
+ extern int pg_strfromd(char *str, size_t count, int precision, double value);
203
+
204
+ /* Replace strerror() with our own, somewhat more robust wrapper */
205
+ extern char *pg_strerror(int errnum);
206
+ #define strerror pg_strerror
207
+
208
+ /* Likewise for strerror_r(); note we prefer the GNU API for that */
209
+ extern char *pg_strerror_r(int errnum, char *buf, size_t buflen);
210
+ #define strerror_r pg_strerror_r
211
+ #define PG_STRERROR_R_BUFLEN 256 /* Recommended buffer size for strerror_r */
212
+
213
+ /* Wrap strsignal(), or provide our own version if necessary */
214
+ extern const char *pg_strsignal(int signum);
215
+
216
+ /* Portable prompt handling */
217
+ extern void simple_prompt(const char *prompt, char *destination, size_t destlen,
218
+ bool echo);
219
+
220
+ extern int pclose_check(FILE *stream);
221
+
222
+ /* Global variable holding time zone information. */
223
+ #if defined(WIN32) || defined(__CYGWIN__)
224
+ #define TIMEZONE_GLOBAL _timezone
225
+ #define TZNAME_GLOBAL _tzname
226
+ #else
227
+ #define TIMEZONE_GLOBAL timezone
228
+ #define TZNAME_GLOBAL tzname
229
+ #endif
230
+
231
+ #if defined(WIN32) || defined(__CYGWIN__)
232
+ /*
233
+ * Win32 doesn't have reliable rename/unlink during concurrent access.
234
+ */
235
+ extern int pgrename(const char *from, const char *to);
236
+ extern int pgunlink(const char *path);
237
+
238
+ /* Include this first so later includes don't see these defines */
239
+ #ifdef _MSC_VER
240
+ #include <io.h>
241
+ #endif
242
+
243
+ #define rename(from, to) pgrename(from, to)
244
+ #define unlink(path) pgunlink(path)
245
+ #endif /* defined(WIN32) || defined(__CYGWIN__) */
246
+
247
+ /*
248
+ * Win32 also doesn't have symlinks, but we can emulate them with
249
+ * junction points on newer Win32 versions.
250
+ *
251
+ * Cygwin has its own symlinks which work on Win95/98/ME where
252
+ * junction points don't, so use those instead. We have no way of
253
+ * knowing what type of system Cygwin binaries will be run on.
254
+ * Note: Some CYGWIN includes might #define WIN32.
255
+ */
256
+ #if defined(WIN32) && !defined(__CYGWIN__)
257
+ extern int pgsymlink(const char *oldpath, const char *newpath);
258
+ extern int pgreadlink(const char *path, char *buf, size_t size);
259
+ extern bool pgwin32_is_junction(const char *path);
260
+
261
+ #define symlink(oldpath, newpath) pgsymlink(oldpath, newpath)
262
+ #define readlink(path, buf, size) pgreadlink(path, buf, size)
263
+ #endif
264
+
265
+ extern bool rmtree(const char *path, bool rmtopdir);
266
+
267
+ #if defined(WIN32) && !defined(__CYGWIN__)
268
+
269
+ /*
270
+ * open() and fopen() replacements to allow deletion of open files and
271
+ * passing of other special options.
272
+ */
273
+ #define O_DIRECT 0x80000000
274
+ extern int pgwin32_open(const char *, int,...);
275
+ extern FILE *pgwin32_fopen(const char *, const char *);
276
+ #define open(a,b,c) pgwin32_open(a,b,c)
277
+ #define fopen(a,b) pgwin32_fopen(a,b)
278
+
279
+ /*
280
+ * Mingw-w64 headers #define popen and pclose to _popen and _pclose. We want
281
+ * to use our popen wrapper, rather than plain _popen, so override that. For
282
+ * consistency, use our version of pclose, too.
283
+ */
284
+ #ifdef popen
285
+ #undef popen
286
+ #endif
287
+ #ifdef pclose
288
+ #undef pclose
289
+ #endif
290
+
291
+ /*
292
+ * system() and popen() replacements to enclose the command in an extra
293
+ * pair of quotes.
294
+ */
295
+ extern int pgwin32_system(const char *command);
296
+ extern FILE *pgwin32_popen(const char *command, const char *type);
297
+
298
+ #define system(a) pgwin32_system(a)
299
+ #define popen(a,b) pgwin32_popen(a,b)
300
+ #define pclose(a) _pclose(a)
301
+
302
+ /* New versions of MingW have gettimeofday, old mingw and msvc don't */
303
+ #ifndef HAVE_GETTIMEOFDAY
304
+ /* Last parameter not used */
305
+ extern int gettimeofday(struct timeval *tp, struct timezone *tzp);
306
+ #endif
307
+ #else /* !WIN32 */
308
+
309
+ /*
310
+ * Win32 requires a special close for sockets and pipes, while on Unix
311
+ * close() does them all.
312
+ */
313
+ #define closesocket close
314
+ #endif /* WIN32 */
315
+
316
+ /*
317
+ * On Windows, setvbuf() does not support _IOLBF mode, and interprets that
318
+ * as _IOFBF. To add insult to injury, setvbuf(file, NULL, _IOFBF, 0)
319
+ * crashes outright if "parameter validation" is enabled. Therefore, in
320
+ * places where we'd like to select line-buffered mode, we fall back to
321
+ * unbuffered mode instead on Windows. Always use PG_IOLBF not _IOLBF
322
+ * directly in order to implement this behavior.
323
+ */
324
+ #ifndef WIN32
325
+ #define PG_IOLBF _IOLBF
326
+ #else
327
+ #define PG_IOLBF _IONBF
328
+ #endif
329
+
330
+ /*
331
+ * Default "extern" declarations or macro substitutes for library routines.
332
+ * When necessary, these routines are provided by files in src/port/.
333
+ */
334
+
335
+ /* Type to use with fseeko/ftello */
336
+ #ifndef WIN32 /* WIN32 is handled in port/win32_port.h */
337
+ #define pgoff_t off_t
338
+ #endif
339
+
340
+ extern double pg_erand48(unsigned short xseed[3]);
341
+ extern long pg_lrand48(void);
342
+ extern long pg_jrand48(unsigned short xseed[3]);
343
+ extern void pg_srand48(long seed);
344
+
345
+ #ifndef HAVE_FLS
346
+ extern int fls(int mask);
347
+ #endif
348
+
349
+ #ifndef HAVE_GETPEEREID
350
+ /* On Windows, Perl might have incompatible definitions of uid_t and gid_t. */
351
+ #ifndef PLPERL_HAVE_UID_GID
352
+ extern int getpeereid(int sock, uid_t *uid, gid_t *gid);
353
+ #endif
354
+ #endif
355
+
356
+ /*
357
+ * Glibc doesn't use the builtin for clang due to a *gcc* bug in a version
358
+ * newer than the gcc compatibility clang claims to have. This would cause a
359
+ * *lot* of superfluous function calls, therefore revert when using clang. In
360
+ * C++ there's issues with libc++ (not libstdc++), so disable as well.
361
+ */
362
+ #if defined(__clang__) && !defined(__cplusplus)
363
+ /* needs to be separate to not confuse other compilers */
364
+ #if __has_builtin(__builtin_isinf)
365
+ /* need to include before, to avoid getting overwritten */
366
+ #include <math.h>
367
+ #undef isinf
368
+ #define isinf __builtin_isinf
369
+ #endif /* __has_builtin(isinf) */
370
+ #endif /* __clang__ && !__cplusplus */
371
+
372
+ #ifndef HAVE_EXPLICIT_BZERO
373
+ extern void explicit_bzero(void *buf, size_t len);
374
+ #endif
375
+
376
+ #ifndef HAVE_STRTOF
377
+ extern float strtof(const char *nptr, char **endptr);
378
+ #endif
379
+
380
+ #ifdef HAVE_BUGGY_STRTOF
381
+ extern float pg_strtof(const char *nptr, char **endptr);
382
+ #define strtof(a,b) (pg_strtof((a),(b)))
383
+ #endif
384
+
385
+ #ifndef HAVE_LINK
386
+ extern int link(const char *src, const char *dst);
387
+ #endif
388
+
389
+ #ifndef HAVE_MKDTEMP
390
+ extern char *mkdtemp(char *path);
391
+ #endif
392
+
393
+ #ifndef HAVE_INET_ATON
394
+ #include <netinet/in.h>
395
+ #include <arpa/inet.h>
396
+ extern int inet_aton(const char *cp, struct in_addr *addr);
397
+ #endif
398
+
399
+ /*
400
+ * Windows and older Unix don't have pread(2) and pwrite(2). We have
401
+ * replacement functions, but they have slightly different semantics so we'll
402
+ * use a name with a pg_ prefix to avoid confusion.
403
+ */
404
+ #ifdef HAVE_PREAD
405
+ #define pg_pread pread
406
+ #else
407
+ extern ssize_t pg_pread(int fd, void *buf, size_t nbyte, off_t offset);
408
+ #endif
409
+
410
+ #ifdef HAVE_PWRITE
411
+ #define pg_pwrite pwrite
412
+ #else
413
+ extern ssize_t pg_pwrite(int fd, const void *buf, size_t nbyte, off_t offset);
414
+ #endif
415
+
416
+ #if !HAVE_DECL_STRLCAT
417
+ extern size_t strlcat(char *dst, const char *src, size_t siz);
418
+ #endif
419
+
420
+ #if !HAVE_DECL_STRLCPY
421
+ extern size_t strlcpy(char *dst, const char *src, size_t siz);
422
+ #endif
423
+
424
+ #if !HAVE_DECL_STRNLEN
425
+ extern size_t strnlen(const char *str, size_t maxlen);
426
+ #endif
427
+
428
+ #if !defined(HAVE_RANDOM)
429
+ extern long random(void);
430
+ #endif
431
+
432
+ #ifndef HAVE_UNSETENV
433
+ extern void unsetenv(const char *name);
434
+ #endif
435
+
436
+ #ifndef HAVE_SRANDOM
437
+ extern void srandom(unsigned int seed);
438
+ #endif
439
+
440
+ #ifndef HAVE_DLOPEN
441
+ extern void *dlopen(const char *file, int mode);
442
+ extern void *dlsym(void *handle, const char *symbol);
443
+ extern int dlclose(void *handle);
444
+ extern char *dlerror(void);
445
+ #endif
446
+
447
+ /*
448
+ * In some older systems, the RTLD_NOW flag isn't defined and the mode
449
+ * argument to dlopen must always be 1.
450
+ */
451
+ #if !HAVE_DECL_RTLD_NOW
452
+ #define RTLD_NOW 1
453
+ #endif
454
+
455
+ /*
456
+ * The RTLD_GLOBAL flag is wanted if available, but it doesn't exist
457
+ * everywhere. If it doesn't exist, set it to 0 so it has no effect.
458
+ */
459
+ #if !HAVE_DECL_RTLD_GLOBAL
460
+ #define RTLD_GLOBAL 0
461
+ #endif
462
+
463
+ /* thread.h */
464
+ #ifndef WIN32
465
+ extern int pqGetpwuid(uid_t uid, struct passwd *resultbuf, char *buffer,
466
+ size_t buflen, struct passwd **result);
467
+ #endif
468
+
469
+ extern int pqGethostbyname(const char *name,
470
+ struct hostent *resultbuf,
471
+ char *buffer, size_t buflen,
472
+ struct hostent **result,
473
+ int *herrno);
474
+
475
+ extern void pg_qsort(void *base, size_t nel, size_t elsize,
476
+ int (*cmp) (const void *, const void *));
477
+ extern int pg_qsort_strcmp(const void *a, const void *b);
478
+
479
+ #define qsort(a,b,c,d) pg_qsort(a,b,c,d)
480
+
481
+ typedef int (*qsort_arg_comparator) (const void *a, const void *b, void *arg);
482
+
483
+ extern void qsort_arg(void *base, size_t nel, size_t elsize,
484
+ qsort_arg_comparator cmp, void *arg);
485
+
486
+ /* port/chklocale.c */
487
+ extern int pg_get_encoding_from_locale(const char *ctype, bool write_message);
488
+
489
+ #if defined(WIN32) && !defined(FRONTEND)
490
+ extern int pg_codepage_to_encoding(UINT cp);
491
+ #endif
492
+
493
+ /* port/inet_net_ntop.c */
494
+ extern char *pg_inet_net_ntop(int af, const void *src, int bits,
495
+ char *dst, size_t size);
496
+
497
+ /* port/pg_strong_random.c */
498
+ extern bool pg_strong_random(void *buf, size_t len);
499
+
500
+ /*
501
+ * pg_backend_random used to be a wrapper for pg_strong_random before
502
+ * Postgres 12 for the backend code.
503
+ */
504
+ #define pg_backend_random pg_strong_random
505
+
506
+ /* port/pgcheckdir.c */
507
+ extern int pg_check_dir(const char *dir);
508
+
509
+ /* port/pgmkdirp.c */
510
+ extern int pg_mkdir_p(char *path, int omode);
511
+
512
+ /* port/pqsignal.c */
513
+ typedef void (*pqsigfunc) (int signo);
514
+ extern pqsigfunc pqsignal(int signo, pqsigfunc func);
515
+
516
+ /* port/quotes.c */
517
+ extern char *escape_single_quotes_ascii(const char *src);
518
+
519
+ /* common/wait_error.c */
520
+ extern char *wait_result_to_str(int exit_status);
521
+ extern bool wait_result_is_signal(int exit_status, int signum);
522
+ extern bool wait_result_is_any_signal(int exit_status, bool include_command_not_found);
523
+
524
+ #endif /* PG_PORT_H */