prestogres 0.1.0

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 (393) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +20 -0
  4. data/LICENSE +202 -0
  5. data/NOTICE +22 -0
  6. data/README.md +217 -0
  7. data/Rakefile +13 -0
  8. data/VERSION +1 -0
  9. data/bin/prestogres +254 -0
  10. data/config/pcp.conf.sample +28 -0
  11. data/config/pgpool.conf +678 -0
  12. data/config/pool_hba.conf +84 -0
  13. data/config/pool_passwd +0 -0
  14. data/config/postgresql.conf +2 -0
  15. data/ext/.gitignore +6 -0
  16. data/ext/depend +26 -0
  17. data/ext/extconf.rb +4 -0
  18. data/ext/prestogres_config.c +12 -0
  19. data/pgpool2/.gitignore +36 -0
  20. data/pgpool2/AUTHORS +4 -0
  21. data/pgpool2/COPYING +12 -0
  22. data/pgpool2/ChangeLog +1 -0
  23. data/pgpool2/INSTALL +1 -0
  24. data/pgpool2/Makefile.am +159 -0
  25. data/pgpool2/Makefile.in +1187 -0
  26. data/pgpool2/NEWS +4960 -0
  27. data/pgpool2/README +1 -0
  28. data/pgpool2/README.euc_jp +1 -0
  29. data/pgpool2/README.online-recovery +62 -0
  30. data/pgpool2/TODO +103 -0
  31. data/pgpool2/ac_func_accept_argtypes.m4 +85 -0
  32. data/pgpool2/aclocal.m4 +1088 -0
  33. data/pgpool2/c-compiler.m4 +134 -0
  34. data/pgpool2/c-library.m4 +325 -0
  35. data/pgpool2/child.c +2097 -0
  36. data/pgpool2/config.guess +1532 -0
  37. data/pgpool2/config.h.in +332 -0
  38. data/pgpool2/config.sub +1640 -0
  39. data/pgpool2/configure +15752 -0
  40. data/pgpool2/configure.in +392 -0
  41. data/pgpool2/depcomp +522 -0
  42. data/pgpool2/doc/basebackup.sh +17 -0
  43. data/pgpool2/doc/pgpool-de.html +4220 -0
  44. data/pgpool2/doc/pgpool-en.html +5738 -0
  45. data/pgpool2/doc/pgpool-fr.html +4118 -0
  46. data/pgpool2/doc/pgpool-ja.css +198 -0
  47. data/pgpool2/doc/pgpool-ja.html +11279 -0
  48. data/pgpool2/doc/pgpool-zh_cn.html +4445 -0
  49. data/pgpool2/doc/pgpool.css +280 -0
  50. data/pgpool2/doc/pgpool_remote_start +13 -0
  51. data/pgpool2/doc/recovery.conf.sample +117 -0
  52. data/pgpool2/doc/tutorial-en.html +707 -0
  53. data/pgpool2/doc/tutorial-ja.html +422 -0
  54. data/pgpool2/doc/tutorial-memqcache-en.html +325 -0
  55. data/pgpool2/doc/tutorial-memqcache-ja.html +370 -0
  56. data/pgpool2/doc/tutorial-memqcache-zh_cn.html +322 -0
  57. data/pgpool2/doc/tutorial-watchdog-en.html +306 -0
  58. data/pgpool2/doc/tutorial-watchdog-ja.html +343 -0
  59. data/pgpool2/doc/tutorial-watchdog-zh_cn.html +301 -0
  60. data/pgpool2/doc/tutorial-zh_cn.html +537 -0
  61. data/pgpool2/doc/watchdog.png +0 -0
  62. data/pgpool2/doc/wd-en.html +236 -0
  63. data/pgpool2/doc/wd-en.jpg +0 -0
  64. data/pgpool2/doc/wd-ja.html +219 -0
  65. data/pgpool2/doc/wd-ja.jpg +0 -0
  66. data/pgpool2/doc/wd-zh_cn.html +201 -0
  67. data/pgpool2/doc/where_to_send_queries.odg +0 -0
  68. data/pgpool2/doc/where_to_send_queries.pdf +0 -0
  69. data/pgpool2/general.m4 +166 -0
  70. data/pgpool2/getopt_long.c +200 -0
  71. data/pgpool2/getopt_long.h +44 -0
  72. data/pgpool2/install-sh +251 -0
  73. data/pgpool2/ltmain.sh +8406 -0
  74. data/pgpool2/m4/libtool.m4 +7360 -0
  75. data/pgpool2/m4/ltoptions.m4 +368 -0
  76. data/pgpool2/m4/ltsugar.m4 +123 -0
  77. data/pgpool2/m4/ltversion.m4 +23 -0
  78. data/pgpool2/m4/lt~obsolete.m4 +92 -0
  79. data/pgpool2/main.c +2971 -0
  80. data/pgpool2/md5.c +444 -0
  81. data/pgpool2/md5.h +28 -0
  82. data/pgpool2/missing +360 -0
  83. data/pgpool2/mkinstalldirs +40 -0
  84. data/pgpool2/parser/Makefile.am +50 -0
  85. data/pgpool2/parser/Makefile.in +559 -0
  86. data/pgpool2/parser/copyfuncs.c +3310 -0
  87. data/pgpool2/parser/gram.c +39100 -0
  88. data/pgpool2/parser/gram.h +940 -0
  89. data/pgpool2/parser/gram.y +13408 -0
  90. data/pgpool2/parser/gramparse.h +74 -0
  91. data/pgpool2/parser/keywords.c +32 -0
  92. data/pgpool2/parser/keywords.h +39 -0
  93. data/pgpool2/parser/kwlist.h +425 -0
  94. data/pgpool2/parser/kwlookup.c +88 -0
  95. data/pgpool2/parser/list.c +1156 -0
  96. data/pgpool2/parser/makefuncs.c +518 -0
  97. data/pgpool2/parser/makefuncs.h +83 -0
  98. data/pgpool2/parser/memnodes.h +79 -0
  99. data/pgpool2/parser/nodes.c +29 -0
  100. data/pgpool2/parser/nodes.h +609 -0
  101. data/pgpool2/parser/outfuncs.c +5790 -0
  102. data/pgpool2/parser/parsenodes.h +2615 -0
  103. data/pgpool2/parser/parser.c +262 -0
  104. data/pgpool2/parser/parser.h +46 -0
  105. data/pgpool2/parser/pg_class.h +158 -0
  106. data/pgpool2/parser/pg_config_manual.h +273 -0
  107. data/pgpool2/parser/pg_list.h +352 -0
  108. data/pgpool2/parser/pg_trigger.h +147 -0
  109. data/pgpool2/parser/pg_wchar.h +492 -0
  110. data/pgpool2/parser/pool_memory.c +342 -0
  111. data/pgpool2/parser/pool_memory.h +77 -0
  112. data/pgpool2/parser/pool_parser.h +222 -0
  113. data/pgpool2/parser/pool_string.c +121 -0
  114. data/pgpool2/parser/pool_string.h +37 -0
  115. data/pgpool2/parser/primnodes.h +1280 -0
  116. data/pgpool2/parser/scan.c +4094 -0
  117. data/pgpool2/parser/scan.l +1451 -0
  118. data/pgpool2/parser/scanner.h +120 -0
  119. data/pgpool2/parser/scansup.c +221 -0
  120. data/pgpool2/parser/scansup.h +28 -0
  121. data/pgpool2/parser/snprintf.c +1102 -0
  122. data/pgpool2/parser/stringinfo.c +294 -0
  123. data/pgpool2/parser/stringinfo.h +178 -0
  124. data/pgpool2/parser/value.c +78 -0
  125. data/pgpool2/parser/value.h +62 -0
  126. data/pgpool2/parser/wchar.c +2048 -0
  127. data/pgpool2/pcp.conf.sample +28 -0
  128. data/pgpool2/pcp/Makefile.am +40 -0
  129. data/pgpool2/pcp/Makefile.in +771 -0
  130. data/pgpool2/pcp/libpcp_ext.h +250 -0
  131. data/pgpool2/pcp/md5.c +444 -0
  132. data/pgpool2/pcp/md5.h +28 -0
  133. data/pgpool2/pcp/pcp.c +1652 -0
  134. data/pgpool2/pcp/pcp.h +61 -0
  135. data/pgpool2/pcp/pcp_attach_node.c +172 -0
  136. data/pgpool2/pcp/pcp_detach_node.c +185 -0
  137. data/pgpool2/pcp/pcp_error.c +87 -0
  138. data/pgpool2/pcp/pcp_node_count.c +160 -0
  139. data/pgpool2/pcp/pcp_node_info.c +198 -0
  140. data/pgpool2/pcp/pcp_pool_status.c +166 -0
  141. data/pgpool2/pcp/pcp_proc_count.c +166 -0
  142. data/pgpool2/pcp/pcp_proc_info.c +261 -0
  143. data/pgpool2/pcp/pcp_promote_node.c +185 -0
  144. data/pgpool2/pcp/pcp_recovery_node.c +172 -0
  145. data/pgpool2/pcp/pcp_stop_pgpool.c +179 -0
  146. data/pgpool2/pcp/pcp_stream.c +385 -0
  147. data/pgpool2/pcp/pcp_stream.h +52 -0
  148. data/pgpool2/pcp/pcp_systemdb_info.c +194 -0
  149. data/pgpool2/pcp/pcp_watchdog_info.c +211 -0
  150. data/pgpool2/pcp_child.c +1493 -0
  151. data/pgpool2/pg_md5.c +305 -0
  152. data/pgpool2/pgpool.8.in +121 -0
  153. data/pgpool2/pgpool.conf +553 -0
  154. data/pgpool2/pgpool.conf.sample +666 -0
  155. data/pgpool2/pgpool.conf.sample-master-slave +665 -0
  156. data/pgpool2/pgpool.conf.sample-replication +664 -0
  157. data/pgpool2/pgpool.conf.sample-stream +664 -0
  158. data/pgpool2/pgpool.spec +264 -0
  159. data/pgpool2/pgpool_adm/TODO +7 -0
  160. data/pgpool2/pgpool_adm/pgpool_adm--1.0.sql +85 -0
  161. data/pgpool2/pgpool_adm/pgpool_adm.c +558 -0
  162. data/pgpool2/pgpool_adm/pgpool_adm.control +5 -0
  163. data/pgpool2/pgpool_adm/pgpool_adm.h +46 -0
  164. data/pgpool2/pgpool_adm/pgpool_adm.sql.in +85 -0
  165. data/pgpool2/pool.h +655 -0
  166. data/pgpool2/pool_auth.c +1390 -0
  167. data/pgpool2/pool_config.c +5007 -0
  168. data/pgpool2/pool_config.h +284 -0
  169. data/pgpool2/pool_config.l +3281 -0
  170. data/pgpool2/pool_config_md5.c +29 -0
  171. data/pgpool2/pool_connection_pool.c +812 -0
  172. data/pgpool2/pool_error.c +242 -0
  173. data/pgpool2/pool_globals.c +27 -0
  174. data/pgpool2/pool_hba.c +1723 -0
  175. data/pgpool2/pool_hba.conf.sample +67 -0
  176. data/pgpool2/pool_ip.c +567 -0
  177. data/pgpool2/pool_ip.h +65 -0
  178. data/pgpool2/pool_ipc.h +38 -0
  179. data/pgpool2/pool_lobj.c +242 -0
  180. data/pgpool2/pool_lobj.h +32 -0
  181. data/pgpool2/pool_memqcache.c +3818 -0
  182. data/pgpool2/pool_memqcache.h +268 -0
  183. data/pgpool2/pool_params.c +163 -0
  184. data/pgpool2/pool_passwd.c +249 -0
  185. data/pgpool2/pool_passwd.h +41 -0
  186. data/pgpool2/pool_path.c +193 -0
  187. data/pgpool2/pool_path.h +81 -0
  188. data/pgpool2/pool_process_context.c +247 -0
  189. data/pgpool2/pool_process_context.h +62 -0
  190. data/pgpool2/pool_process_query.c +5001 -0
  191. data/pgpool2/pool_process_reporting.c +1671 -0
  192. data/pgpool2/pool_process_reporting.h +44 -0
  193. data/pgpool2/pool_proto2.c +671 -0
  194. data/pgpool2/pool_proto_modules.c +3524 -0
  195. data/pgpool2/pool_proto_modules.h +185 -0
  196. data/pgpool2/pool_query_cache.c +1020 -0
  197. data/pgpool2/pool_query_context.c +1871 -0
  198. data/pgpool2/pool_query_context.h +105 -0
  199. data/pgpool2/pool_relcache.c +284 -0
  200. data/pgpool2/pool_relcache.h +78 -0
  201. data/pgpool2/pool_rewrite_outfuncs.c +9060 -0
  202. data/pgpool2/pool_rewrite_query.c +715 -0
  203. data/pgpool2/pool_rewrite_query.h +192 -0
  204. data/pgpool2/pool_select_walker.c +1150 -0
  205. data/pgpool2/pool_select_walker.h +68 -0
  206. data/pgpool2/pool_sema.c +161 -0
  207. data/pgpool2/pool_session_context.c +952 -0
  208. data/pgpool2/pool_session_context.h +203 -0
  209. data/pgpool2/pool_shmem.c +185 -0
  210. data/pgpool2/pool_signal.c +158 -0
  211. data/pgpool2/pool_signal.h +61 -0
  212. data/pgpool2/pool_ssl.c +339 -0
  213. data/pgpool2/pool_stream.c +962 -0
  214. data/pgpool2/pool_stream.h +61 -0
  215. data/pgpool2/pool_system.c +659 -0
  216. data/pgpool2/pool_timestamp.c +1215 -0
  217. data/pgpool2/pool_timestamp.h +38 -0
  218. data/pgpool2/pool_type.h +171 -0
  219. data/pgpool2/pool_worker_child.c +384 -0
  220. data/pgpool2/ps_status.c +404 -0
  221. data/pgpool2/recovery.c +435 -0
  222. data/pgpool2/redhat/pgpool.conf.sample.patch +52 -0
  223. data/pgpool2/redhat/pgpool.init +201 -0
  224. data/pgpool2/redhat/pgpool.sysconfig +7 -0
  225. data/pgpool2/redhat/rpm_installer/basebackup-replication.sh +53 -0
  226. data/pgpool2/redhat/rpm_installer/basebackup-stream.sh +55 -0
  227. data/pgpool2/redhat/rpm_installer/config_for_script +17 -0
  228. data/pgpool2/redhat/rpm_installer/failover.sh +64 -0
  229. data/pgpool2/redhat/rpm_installer/getsources.sh +141 -0
  230. data/pgpool2/redhat/rpm_installer/install.sh +1363 -0
  231. data/pgpool2/redhat/rpm_installer/pgpool_recovery_pitr +47 -0
  232. data/pgpool2/redhat/rpm_installer/pgpool_remote_start +15 -0
  233. data/pgpool2/redhat/rpm_installer/recovery.conf +4 -0
  234. data/pgpool2/redhat/rpm_installer/uninstall.sh +57 -0
  235. data/pgpool2/sample/dist_def_pgbench.sql +73 -0
  236. data/pgpool2/sample/pgpool.pam +3 -0
  237. data/pgpool2/sample/pgpool_recovery +20 -0
  238. data/pgpool2/sample/pgpool_recovery_pitr +19 -0
  239. data/pgpool2/sample/pgpool_remote_start +13 -0
  240. data/pgpool2/sample/replicate_def_pgbench.sql +18 -0
  241. data/pgpool2/sql/insert_lock.sql +15 -0
  242. data/pgpool2/sql/pgpool-recovery/pgpool-recovery.c +280 -0
  243. data/pgpool2/sql/pgpool-recovery/pgpool-recovery.sql.in +19 -0
  244. data/pgpool2/sql/pgpool-recovery/pgpool_recovery--1.0.sql +24 -0
  245. data/pgpool2/sql/pgpool-recovery/pgpool_recovery.control +5 -0
  246. data/pgpool2/sql/pgpool-recovery/uninstall_pgpool-recovery.sql +3 -0
  247. data/pgpool2/sql/pgpool-regclass/pgpool-regclass.c +206 -0
  248. data/pgpool2/sql/pgpool-regclass/pgpool-regclass.sql.in +4 -0
  249. data/pgpool2/sql/pgpool-regclass/pgpool_regclass--1.0.sql +7 -0
  250. data/pgpool2/sql/pgpool-regclass/pgpool_regclass.control +5 -0
  251. data/pgpool2/sql/pgpool-regclass/uninstall_pgpool-regclass.sql +1 -0
  252. data/pgpool2/sql/system_db.sql +38 -0
  253. data/pgpool2/strlcpy.c +85 -0
  254. data/pgpool2/test/C/test_extended.c +98 -0
  255. data/pgpool2/test/jdbc/.cvsignore +2 -0
  256. data/pgpool2/test/jdbc/AutoCommitTest.java +45 -0
  257. data/pgpool2/test/jdbc/BatchTest.java +55 -0
  258. data/pgpool2/test/jdbc/ColumnTest.java +60 -0
  259. data/pgpool2/test/jdbc/CreateTempTableTest.java +48 -0
  260. data/pgpool2/test/jdbc/InsertTest.java +34 -0
  261. data/pgpool2/test/jdbc/LockTest.java +36 -0
  262. data/pgpool2/test/jdbc/PgpoolTest.java +75 -0
  263. data/pgpool2/test/jdbc/README.euc_jp +73 -0
  264. data/pgpool2/test/jdbc/RunTest.java +83 -0
  265. data/pgpool2/test/jdbc/SelectTest.java +37 -0
  266. data/pgpool2/test/jdbc/UpdateTest.java +32 -0
  267. data/pgpool2/test/jdbc/expected/CreateTempTable +1 -0
  268. data/pgpool2/test/jdbc/expected/autocommit +10 -0
  269. data/pgpool2/test/jdbc/expected/batch +1 -0
  270. data/pgpool2/test/jdbc/expected/column +100 -0
  271. data/pgpool2/test/jdbc/expected/insert +1 -0
  272. data/pgpool2/test/jdbc/expected/lock +100 -0
  273. data/pgpool2/test/jdbc/expected/select +2 -0
  274. data/pgpool2/test/jdbc/expected/update +1 -0
  275. data/pgpool2/test/jdbc/pgpool.properties +7 -0
  276. data/pgpool2/test/jdbc/prepare.sql +54 -0
  277. data/pgpool2/test/jdbc/run.sh +6 -0
  278. data/pgpool2/test/parser/.cvsignore +6 -0
  279. data/pgpool2/test/parser/README +32 -0
  280. data/pgpool2/test/parser/expected/copy.out +17 -0
  281. data/pgpool2/test/parser/expected/create.out +64 -0
  282. data/pgpool2/test/parser/expected/cursor.out +37 -0
  283. data/pgpool2/test/parser/expected/delete.out +10 -0
  284. data/pgpool2/test/parser/expected/drop.out +12 -0
  285. data/pgpool2/test/parser/expected/insert.out +13 -0
  286. data/pgpool2/test/parser/expected/misc.out +28 -0
  287. data/pgpool2/test/parser/expected/prepare.out +4 -0
  288. data/pgpool2/test/parser/expected/privileges.out +31 -0
  289. data/pgpool2/test/parser/expected/scanner.out +30 -0
  290. data/pgpool2/test/parser/expected/select.out +89 -0
  291. data/pgpool2/test/parser/expected/transaction.out +38 -0
  292. data/pgpool2/test/parser/expected/update.out +11 -0
  293. data/pgpool2/test/parser/expected/v84.out +37 -0
  294. data/pgpool2/test/parser/expected/v90.out +25 -0
  295. data/pgpool2/test/parser/expected/var.out +22 -0
  296. data/pgpool2/test/parser/input/alter.sql +2 -0
  297. data/pgpool2/test/parser/input/copy.sql +17 -0
  298. data/pgpool2/test/parser/input/create.sql +64 -0
  299. data/pgpool2/test/parser/input/cursor.sql +37 -0
  300. data/pgpool2/test/parser/input/delete.sql +10 -0
  301. data/pgpool2/test/parser/input/drop.sql +12 -0
  302. data/pgpool2/test/parser/input/insert.sql +13 -0
  303. data/pgpool2/test/parser/input/misc.sql +28 -0
  304. data/pgpool2/test/parser/input/prepare.sql +4 -0
  305. data/pgpool2/test/parser/input/privileges.sql +31 -0
  306. data/pgpool2/test/parser/input/scanner.sql +34 -0
  307. data/pgpool2/test/parser/input/select.sql +89 -0
  308. data/pgpool2/test/parser/input/transaction.sql +38 -0
  309. data/pgpool2/test/parser/input/update.sql +11 -0
  310. data/pgpool2/test/parser/input/v84.sql +37 -0
  311. data/pgpool2/test/parser/input/v90.sql +38 -0
  312. data/pgpool2/test/parser/input/var.sql +22 -0
  313. data/pgpool2/test/parser/main.c +96 -0
  314. data/pgpool2/test/parser/parse_schedule +16 -0
  315. data/pgpool2/test/parser/pool.h +13 -0
  316. data/pgpool2/test/parser/run-test +62 -0
  317. data/pgpool2/test/pdo-test/README.euc_jp +58 -0
  318. data/pgpool2/test/pdo-test/SQLlist/test1.sql +3 -0
  319. data/pgpool2/test/pdo-test/SQLlist/test2.sql +3 -0
  320. data/pgpool2/test/pdo-test/collections.inc +11 -0
  321. data/pgpool2/test/pdo-test/def.inc +7 -0
  322. data/pgpool2/test/pdo-test/log.txt +0 -0
  323. data/pgpool2/test/pdo-test/mod/database.inc +36 -0
  324. data/pgpool2/test/pdo-test/mod/def.inc +0 -0
  325. data/pgpool2/test/pdo-test/mod/errorhandler.inc +27 -0
  326. data/pgpool2/test/pdo-test/pdotest.php +11 -0
  327. data/pgpool2/test/pdo-test/regsql.inc +56 -0
  328. data/pgpool2/test/pgpool_setup +898 -0
  329. data/pgpool2/test/regression/README +39 -0
  330. data/pgpool2/test/regression/clean.sh +21 -0
  331. data/pgpool2/test/regression/libs.sh +16 -0
  332. data/pgpool2/test/regression/regress.sh +166 -0
  333. data/pgpool2/test/regression/tests/001.load_balance/test.sh +128 -0
  334. data/pgpool2/test/regression/tests/002.native_replication/PgTester.java +47 -0
  335. data/pgpool2/test/regression/tests/002.native_replication/create.sql +6 -0
  336. data/pgpool2/test/regression/tests/002.native_replication/test.sh +71 -0
  337. data/pgpool2/test/regression/tests/003.failover/expected.r +6 -0
  338. data/pgpool2/test/regression/tests/003.failover/expected.s +6 -0
  339. data/pgpool2/test/regression/tests/003.failover/test.sh +45 -0
  340. data/pgpool2/test/regression/tests/004.watchdog/master.conf +12 -0
  341. data/pgpool2/test/regression/tests/004.watchdog/standby.conf +19 -0
  342. data/pgpool2/test/regression/tests/004.watchdog/test.sh +52 -0
  343. data/pgpool2/test/regression/tests/050.bug58/test.sh +50 -0
  344. data/pgpool2/test/regression/tests/051.bug60/bug.sql +12 -0
  345. data/pgpool2/test/regression/tests/051.bug60/database-clean.sql +6 -0
  346. data/pgpool2/test/regression/tests/051.bug60/database-setup.sql +28 -0
  347. data/pgpool2/test/regression/tests/051.bug60/test.sh +79 -0
  348. data/pgpool2/test/regression/tests/052.do_query/test.sh +44 -0
  349. data/pgpool2/test/regression/tests/053.insert_lock_hangs/test.sh +81 -0
  350. data/pgpool2/test/regression/tests/054.postgres_fdw/test.sh +67 -0
  351. data/pgpool2/test/regression/tests/055.backend_all_down/test.sh +52 -0
  352. data/pgpool2/test/regression/tests/056.bug63/jdbctest2.java +66 -0
  353. data/pgpool2/test/regression/tests/056.bug63/test.sh +47 -0
  354. data/pgpool2/test/regression/tests/057.bug61/test.sh +40 -0
  355. data/pgpool2/test/regression/tests/058.bug68/jdbctest3.java +45 -0
  356. data/pgpool2/test/regression/tests/058.bug68/test.sh +47 -0
  357. data/pgpool2/test/timestamp/expected/insert.out +16 -0
  358. data/pgpool2/test/timestamp/expected/misc.out +3 -0
  359. data/pgpool2/test/timestamp/expected/update.out +6 -0
  360. data/pgpool2/test/timestamp/input/insert.sql +16 -0
  361. data/pgpool2/test/timestamp/input/misc.sql +3 -0
  362. data/pgpool2/test/timestamp/input/update.sql +6 -0
  363. data/pgpool2/test/timestamp/main.c +129 -0
  364. data/pgpool2/test/timestamp/parse_schedule +3 -0
  365. data/pgpool2/test/timestamp/run-test +69 -0
  366. data/pgpool2/version.h +1 -0
  367. data/pgpool2/watchdog/Makefile.am +17 -0
  368. data/pgpool2/watchdog/Makefile.in +505 -0
  369. data/pgpool2/watchdog/test/stab.c +266 -0
  370. data/pgpool2/watchdog/test/test.c +85 -0
  371. data/pgpool2/watchdog/test/wd_child_t.c +87 -0
  372. data/pgpool2/watchdog/test/wd_lifecheck_t.c +87 -0
  373. data/pgpool2/watchdog/test/wd_packet_t.c +87 -0
  374. data/pgpool2/watchdog/test/wd_ping_t.c +20 -0
  375. data/pgpool2/watchdog/watchdog.c +408 -0
  376. data/pgpool2/watchdog/watchdog.h +209 -0
  377. data/pgpool2/watchdog/wd_child.c +444 -0
  378. data/pgpool2/watchdog/wd_ext.h +123 -0
  379. data/pgpool2/watchdog/wd_heartbeat.c +577 -0
  380. data/pgpool2/watchdog/wd_if.c +216 -0
  381. data/pgpool2/watchdog/wd_init.c +126 -0
  382. data/pgpool2/watchdog/wd_interlock.c +347 -0
  383. data/pgpool2/watchdog/wd_lifecheck.c +512 -0
  384. data/pgpool2/watchdog/wd_list.c +429 -0
  385. data/pgpool2/watchdog/wd_packet.c +1159 -0
  386. data/pgpool2/watchdog/wd_ping.c +330 -0
  387. data/pgpool2/ylwrap +223 -0
  388. data/pgsql/presto_client.py +346 -0
  389. data/pgsql/prestogres.py +156 -0
  390. data/pgsql/setup_functions.sql +21 -0
  391. data/pgsql/setup_language.sql +3 -0
  392. data/prestogres.gemspec +23 -0
  393. metadata +496 -0
Binary file
@@ -0,0 +1,201 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="content-type" content="text/html;charset=gbk">
5
+ <link rel="stylesheet" href="./pgpool-ja.css" type="text/css">
6
+ <title>���Ź��ֲ�</title>
7
+ </head>
8
+ <body>
9
+ <h1>ʲô�ǿ��Ź�</h1>
10
+ <p>
11
+ �����Ź�����һ�� pgpool-II ���ӽ��̣�����Ϊ pgpool-II ���Ӹ߿����Թ��ܡ����Ź����ӵĹ��ܰ�����
12
+
13
+ <ul>
14
+ <li>pgpool ����Ĵ����</li>
15
+ <p>
16
+ ���Ź���� pgpool ��<i>����</i>�����ǽ��̡���ͨ�������Ź���ص� pgpool ���Ͳ�ѯ�� PostgreSQL �������Ӧ��
17
+ ���ҿ��Ź���ش� pgpool �����η�������Ӧ�÷������ȣ�����·��
18
+ �����η������� pgpool ֮������ӱ��� pgpool �ķ���ķ�ʽ���м�ء�
19
+ </p>
20
+
21
+ <li>���Ź����̼��໥���</li>
22
+ <p>
23
+ ���Ź����̽�������ط������ϵ���Ϣ��Ϣ�Ա�֤��Ϣ�����µģ����������Ź������໥��ضԷ���
24
+ </p>
25
+
26
+ <li>��ijЩ���ϱ���⵽������¸ı��Ծ/����״̬</li>
27
+ <p>
28
+ �� pgpool ������̽�⵽���ϣ����Ź�����������֪ͨ���������Ź���
29
+ ���Ź���ȷ�ϾɵĻ�Ծ�� pgpool �޷��ṩ����ʱ��ͨ��ͶƱȷ���µ� pgpool ��Ծ�ڵ㣬���ı��Ծ/����״̬��
30
+ </p>
31
+
32
+ <li>�ڷ����л���ʱ��ͬ��ʵ������ IP ��ַ����</li>
33
+ <p>
34
+ ��һ�����õ� pgpool ��������Ϊ��Ծ״̬���µĻ�Ծ�������������� IP �ӿڡ�
35
+ Ҳ���ǣ�֮ǰ��Ծ�ķ�����ͣ������ IP �ӿڡ�
36
+ ���û�Ծ�� pgpool ʹ����ͬ�� IP ��ַ����ʹ���ڷ����������л���ʱ��
37
+ </p>
38
+
39
+ <li>�ڻָ����Զ�ע�����Ϊ����״̬</li>
40
+ <p>
41
+ �����ϵķ������ָ����µķ����������룬���Ź�����ͬʱ��֪ͨ�����Ŀ��Ź����̹����·���������Ϣ��
42
+ ���ڻ�Ծ�������Լ������������ϵĿ��Ź����̻������Щ��Ϣ��Ȼ���¼���ķ������ᱻע��Ϊ���ýڵ㡣
43
+ </p>
44
+ </ul>
45
+ </p>
46
+ <h2>�������ṹͼ</h2>
47
+
48
+ <p>
49
+ ��ͼ������ pgpool-II �Ϳ��Ź����̵����������
50
+ </p>
51
+ <table align=center width=800>
52
+ <tr><td>
53
+ <img src="wd-en.jpg" alt="watchdog server composition" hight=70% width=70%>
54
+ </td></tr>
55
+ </table>
56
+ <h2>����/ֹͣ���Ź�</h2>
57
+ <p>
58
+ ���Ź������� pgpool-II һ����ͣ��Ҳ����˵��û�е�����������ͣ����
59
+ Ȼ����pgpool-II ������ <font color="red">root Ȩ��</font>��������Ϊ���Ź�������Ҫ�������� IP �ӿڡ�
60
+ </p>
61
+ <h2>���ÿ��Ź� (pgpool.conf)</h2>
62
+ <p>
63
+ ���Ź������ò���Ҳ�� pgpool.conf �С��� pgpool.conf.sample �ļ��е� WATCHDOG С����ʾ�����á�
64
+ �������е�ѡ������ÿ��Ź���������Ҫ�ġ�
65
+ </p>
66
+
67
+ <h3>��������</h3>
68
+ <dl>
69
+
70
+ <dt><a name="USE_WATCHDOG"></a>use_watchdog</dt>
71
+ <dd>
72
+ <p>
73
+ ���Ϊ on���򼤻�Ź���Ĭ��Ϊ off��
74
+ </p>
75
+ </dd>
76
+
77
+ <dt><a name="TRUSTED_SERVERS"></a>trusted_servers</dt>
78
+ <dd>
79
+ <p>
80
+ ���ڼ���������ӵĿ��ŷ������б���ÿ̨����������������Ӧ ping��
81
+ ָ��һϵ���ö��ŷָ��ķ������б������� "hostA,hostB,hostC"��
82
+ </p>
83
+ </dd>
84
+
85
+ <dt><a name="DELEGATE_IP"></a>delegate_IP</dt>
86
+ <dd>
87
+ <p>
88
+ ָ���ͻ��˷�������Ӧ�÷������ȣ����ӵ��� pgpool-II ������ IP ��ַ(VIP)��
89
+ ��һ�� pgpool �ӱ��ýڵ��л�����Ծ״̬��pgpool ��ʹ����� VIP��
90
+ </p>
91
+ </dd>
92
+
93
+ <dt><a name="WD_HOSTNAME"></a>wd_hostname</dt>
94
+ <dd>
95
+ <p>
96
+ ָ�����ڻ����صĿ��Ź����̵��������� IP ��ַ��
97
+ </p>
98
+ </dd>
99
+
100
+ <dt><a name="WD_PORT"></a>wd_port</dt>
101
+ <dd>
102
+ <p>
103
+ ָ�����ڻ����صĿ��Ź����̵Ķ˿ںš�
104
+ </p>
105
+ </dd>
106
+
107
+ <dt><a name="WD_INTERVAL"></a>wd_interval</dt>
108
+ <dd>
109
+ <p>
110
+ ������ָ�� pgpoll-II ���ڴ����ļ������λΪ�루���ڻ���� 1 �����֣���
111
+ </p>
112
+ </dd>
113
+
114
+ <dt><a name="PING_PATH"></a>ping_path</dt>
115
+ <dd>
116
+ <p>
117
+ ������ָ�����ڼ�����η������� ping �����·����ֻ��Ҫ����·������ "/bin" ��
118
+ </p>
119
+ </dd>
120
+
121
+ <dt><a name="IFCONFIG_PATH"></a>ifconfig_path</dt>
122
+ <dd>
123
+ <p>
124
+ T������ָ�������л� IP ��ַ�����������·���� ֻ����·�������� "/sbin"��
125
+ </p>
126
+ </dd>
127
+
128
+ <dt><a name="IF_UP_CMD"></a>if_up_cmd</dt>
129
+ <dd>
130
+ <p>
131
+ ������ָ��һ������������������ IP����������Ͳ��������� "ifconfig eth0:0 inet $_IP_$ netmask 255.255.255.0"��
132
+ ���� $_IP_$ �ᱻ delegate_IP ���õ�ֵ�滻��
133
+ </p>
134
+ </dd>
135
+
136
+ <dt><a name="IF_DOWN_CMD"></a>if_down_cmd</dt>
137
+ <dd>
138
+ <p>
139
+ ������ָ��һ����������ͣ������ IP����������Ͳ��������� "ifconfig eth0:0 down"��
140
+ </p>
141
+ </dd>
142
+
143
+ <dt><a name="ARPING_PATH"></a>arping_path</dt>
144
+ <dd>
145
+ <p>
146
+ ������ָ���ڷ������� IP �л������ڷ���һ�� ARP ��������������·����ֻ����·�������� "/usr/sbin"��
147
+ </p>
148
+ </dd>
149
+
150
+ <dt><a name="ARPING_CMD"></a>arping_cmd</dt>
151
+ <dd>
152
+ <p>
153
+ ������ָ��һ�����������ڷ������� IP �л������ڷ���һ�� ARP ��������
154
+ ��������Ͳ��������� "arping -U $_IP_$ -w 1"������ $_IP_$ �ᱻ delegate_IP ���õ�ֵ�滻��
155
+ </p>
156
+ </dd>
157
+
158
+ <dt><a name="WD_LIFE_POINT"></a>wd_life_point</dt>
159
+ <dd>
160
+ <p>
161
+ ��ȷ�� pgpool-II ʧЧʱ�����Դ�����һ�����ڻ���� 1 �����֣���
162
+ </p>
163
+ </dd>
164
+
165
+ <dt><a name="WD_LIFECHECK_QUERY"></a>wd_lifecheck_query</dt>
166
+ <dd>
167
+ <p>
168
+ ���ڼ�� pgpool-II �IJ�ѯ��Ĭ��Ϊ "SELECT 1"��
169
+ </p>
170
+ </dd>
171
+
172
+ </dl>
173
+
174
+ <h3>����صķ�����</h3>
175
+ <dl>
176
+ <dt><a name="OTHER_PGPOOL_HOSTNAME"></a>other_pgpool_hostname<font color="red">0</font></dt>
177
+ <dd>
178
+ <p>
179
+ ָ����Ҫ��ص� pgpool-II �����������������ڷ���/���ղ�ѯ�����ݰ���ͬʱҲ�ǿ��Ź��ı�ʶ��
180
+ ����������������ֱ�ʾ��������š����� 0 ��ʼ��
181
+ </p>
182
+ </dd>
183
+
184
+ <dt><a name="OTHER_PGPOOL_PORT"></a>other_pgpool_port<font color="red">0</font></dt>
185
+ <dd>
186
+ <p>
187
+ ָ����Ҫ��ص� pgpool-II �������� pgpool ����Ķ˿ڡ����ڲ�ѯģʽ��wd_lifecheck_query ָ���IJ�ѯ��佫�����͵�����˿ڡ�
188
+ ����������������ֱ�ʾ��������š����� 0 ��ʼ��
189
+ </p>
190
+ </dd>
191
+
192
+ <dt><a name="OTHER_WD_PORT"></a>other_wd_port<font color="red">0</font></dt>
193
+ <dd>
194
+ <p>
195
+ ָ����Ҫ��ص� pgpool-II �������Ŀ��Ź��Ķ˿ڡ�
196
+ ����������������ֱ�ʾ��������š����� 0 ��ʼ��
197
+ </p>
198
+ </dd>
199
+ </dl>
200
+ </body>
201
+ </html>
@@ -0,0 +1,166 @@
1
+ # $PostgreSQL: pgsql/config/general.m4,v 1.10 2008/10/29 09:27:24 petere Exp $
2
+
3
+ # This file defines new macros to process configure command line
4
+ # arguments, to replace the brain-dead AC_ARG_WITH and AC_ARG_ENABLE.
5
+ # The flaw in these is particularly that they only differentiate
6
+ # between "given" and "not given" and do not provide enough help to
7
+ # process arguments that only accept "yes/no", that require an
8
+ # argument (other than "yes/no"), etc.
9
+ #
10
+ # The point of this implementation is to reduce code size and
11
+ # redundancy in configure.in and to improve robustness and consistency
12
+ # in the option evaluation code.
13
+
14
+
15
+ # Convert type and name to shell variable name (e.g., "enable_long_strings")
16
+ m4_define([pgac_arg_to_variable],
17
+ [$1[]_[]patsubst($2, -, _)])
18
+
19
+
20
+ # PGAC_ARG(TYPE, NAME, HELP-STRING-LHS-EXTRA, HELP-STRING-RHS,
21
+ # [ACTION-IF-YES], [ACTION-IF-NO], [ACTION-IF-ARG],
22
+ # [ACTION-IF-OMITTED])
23
+ # ------------------------------------------------------------
24
+ # This is the base layer. TYPE is either "with" or "enable", depending
25
+ # on what you like. NAME is the rest of the option name.
26
+ # HELP-STRING-LHS-EXTRA is a string to append to the option name on
27
+ # the left-hand side of the help output, e.g., an argument name. If
28
+ # set to "-", append nothing, but let the option appear in the
29
+ # negative form (disable/without). HELP-STRING-RHS is the option
30
+ # description, for the right-hand side of the help output.
31
+ # ACTION-IF-YES is executed if the option is given without an argument
32
+ # (or "yes", which is the same); similar for ACTION-IF-NO.
33
+
34
+ AC_DEFUN([PGAC_ARG],
35
+ [
36
+ pgac_args="$pgac_args pgac_arg_to_variable([$1],[$2])"
37
+ m4_case([$1],
38
+
39
+ enable, [
40
+ AC_ARG_ENABLE([$2], [AS_HELP_STRING([--]m4_if($3, -, disable, enable)[-$2]m4_if($3, -, , $3), [$4])], [
41
+ case [$]enableval in
42
+ yes)
43
+ m4_default([$5], :)
44
+ ;;
45
+ no)
46
+ m4_default([$6], :)
47
+ ;;
48
+ *)
49
+ $7
50
+ ;;
51
+ esac
52
+ ],
53
+ [$8])[]dnl AC_ARG_ENABLE
54
+ ],
55
+
56
+ with, [
57
+ AC_ARG_WITH([$2], [AS_HELP_STRING([--]m4_if($3, -, without, with)[-$2]m4_if($3, -, , $3), [$4])], [
58
+ case [$]withval in
59
+ yes)
60
+ m4_default([$5], :)
61
+ ;;
62
+ no)
63
+ m4_default([$6], :)
64
+ ;;
65
+ *)
66
+ $7
67
+ ;;
68
+ esac
69
+ ],
70
+ [$8])[]dnl AC_ARG_WITH
71
+ ],
72
+
73
+ [m4_fatal([first argument of $0 must be 'enable' or 'with', not '$1'])]
74
+ )
75
+ ])# PGAC_ARG
76
+
77
+ # PGAC_ARG_CHECK()
78
+ # ----------------
79
+ # Checks if the user passed any --with/without/enable/disable
80
+ # arguments that were not defined. Just prints out a warning message,
81
+ # so this should be called near the end, so the user will see it.
82
+
83
+ AC_DEFUN([PGAC_ARG_CHECK],
84
+ [for pgac_var in `set | sed 's/=.*//' | $EGREP 'with_|enable_'`; do
85
+ for pgac_arg in $pgac_args with_gnu_ld; do
86
+ if test "$pgac_var" = "$pgac_arg"; then
87
+ continue 2
88
+ fi
89
+ done
90
+ pgac_txt=`echo $pgac_var | sed 's/_/-/g'`
91
+ AC_MSG_WARN([option ignored: --$pgac_txt])
92
+ done])# PGAC_ARG_CHECK
93
+
94
+ # PGAC_ARG_BOOL(TYPE, NAME, DEFAULT, HELP-STRING-RHS,
95
+ # [ACTION-IF-YES], [ACTION-IF-NO])
96
+ # ---------------------------------------------------
97
+ # Accept a boolean option, that is, one that only takes yes or no.
98
+ # ("no" is equivalent to "disable" or "without"). DEFAULT is what
99
+ # should be done if the option is omitted; it should be "yes" or "no".
100
+ # (Consequently, one of ACTION-IF-YES and ACTION-IF-NO will always
101
+ # execute.)
102
+
103
+ AC_DEFUN([PGAC_ARG_BOOL],
104
+ [dnl The following hack is necessary because in a few instances this
105
+ dnl macro is called twice for the same option with different default
106
+ dnl values. But we only want it to appear once in the help. We achieve
107
+ dnl that by making the help string look the same, which is why we need to
108
+ dnl save the default that was passed in previously.
109
+ m4_define([_pgac_helpdefault], m4_ifdef([pgac_defined_$1_$2_bool], [m4_defn([pgac_defined_$1_$2_bool])], [$3]))dnl
110
+ PGAC_ARG([$1], [$2], [m4_if(_pgac_helpdefault, yes, -)], [$4], [$5], [$6],
111
+ [AC_MSG_ERROR([no argument expected for --$1-$2 option])],
112
+ [m4_case([$3],
113
+ yes, [pgac_arg_to_variable([$1], [$2])=yes
114
+ $5],
115
+ no, [pgac_arg_to_variable([$1], [$2])=no
116
+ $6],
117
+ [m4_fatal([third argument of $0 must be 'yes' or 'no', not '$3'])])])[]dnl
118
+ m4_define([pgac_defined_$1_$2_bool], [$3])dnl
119
+ ])# PGAC_ARG_BOOL
120
+
121
+
122
+ # PGAC_ARG_REQ(TYPE, NAME, HELP-ARGNAME, HELP-STRING-RHS,
123
+ # [ACTION-IF-GIVEN], [ACTION-IF-NOT-GIVEN])
124
+ # -------------------------------------------------------
125
+ # This option will require an argument; "yes" or "no" will not be
126
+ # accepted. HELP-ARGNAME is a name for the argument for the help output.
127
+
128
+ AC_DEFUN([PGAC_ARG_REQ],
129
+ [PGAC_ARG([$1], [$2], [=$3], [$4],
130
+ [AC_MSG_ERROR([argument required for --$1-$2 option])],
131
+ [AC_MSG_ERROR([argument required for --$1-$2 option])],
132
+ [$5],
133
+ [$6])])# PGAC_ARG_REQ
134
+
135
+
136
+ # PGAC_ARG_OPTARG(TYPE, NAME, HELP-ARGNAME, HELP-STRING-RHS,
137
+ # [DEFAULT-ACTION], [ARG-ACTION],
138
+ # [ACTION-ENABLED], [ACTION-DISABLED])
139
+ # ----------------------------------------------------------
140
+ # This will create an option that behaves as follows: If omitted, or
141
+ # called with "no", then set the enable_variable to "no" and do
142
+ # nothing else. If called with "yes", then execute DEFAULT-ACTION. If
143
+ # called with argument, set enable_variable to "yes" and execute
144
+ # ARG-ACTION. Additionally, execute ACTION-ENABLED if we ended up with
145
+ # "yes" either way, else ACTION-DISABLED.
146
+ #
147
+ # The intent is to allow enabling a feature, and optionally pass an
148
+ # additional piece of information.
149
+
150
+ AC_DEFUN([PGAC_ARG_OPTARG],
151
+ [PGAC_ARG([$1], [$2], [@<:@=$3@:>@], [$4], [$5], [],
152
+ [pgac_arg_to_variable([$1], [$2])=yes
153
+ $6],
154
+ [pgac_arg_to_variable([$1], [$2])=no])
155
+ dnl Add this code only if there's a ACTION-ENABLED or ACTION-DISABLED.
156
+ m4_ifval([$7[]$8],
157
+ [
158
+ if test "[$]pgac_arg_to_variable([$1], [$2])" = yes; then
159
+ m4_default([$7], :)
160
+ m4_ifval([$8],
161
+ [else
162
+ $8
163
+ ])[]dnl
164
+ fi
165
+ ])[]dnl
166
+ ])# PGAC_ARG_OPTARG
@@ -0,0 +1,200 @@
1
+ /*
2
+ * getopt_long() -- long options parser
3
+ *
4
+ * Portions Copyright (c) 1987, 1993, 1994
5
+ * The Regents of the University of California. All rights reserved.
6
+ *
7
+ * Portions Copyright (c) 2003
8
+ * PostgreSQL Global Development Group
9
+ *
10
+ * Redistribution and use in source and binary forms, with or without
11
+ * modification, are permitted provided that the following conditions
12
+ * are met:
13
+ * 1. Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ * 2. Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in the
17
+ * documentation and/or other materials provided with the distribution.
18
+ * 3. Neither the name of the University nor the names of its contributors
19
+ * may be used to endorse or promote products derived from this software
20
+ * without specific prior written permission.
21
+ *
22
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32
+ * SUCH DAMAGE.
33
+ *
34
+ * $PostgreSQL: pgsql/src/port/getopt_long.c,v 1.8 2009-06-11 14:49:15 momjian Exp $
35
+ */
36
+
37
+ #include <stdio.h>
38
+ #include <string.h>
39
+ #include "getopt_long.h"
40
+
41
+ #ifndef HAVE_INT_OPTRESET
42
+ int optreset;
43
+
44
+ /* else the "extern" was provided by getopt_long.h */
45
+ #endif
46
+
47
+ #define BADCH '?'
48
+ #define BADARG ':'
49
+ #define EMSG ""
50
+
51
+
52
+ int
53
+ getopt_long(int argc, char *const argv[],
54
+ const char *optstring,
55
+ const struct option * longopts, int *longindex)
56
+ {
57
+ static char *place = EMSG; /* option letter processing */
58
+ char *oli; /* option letter list index */
59
+
60
+ if (optreset || !*place)
61
+ { /* update scanning pointer */
62
+ optreset = 0;
63
+
64
+ if (optind >= argc)
65
+ {
66
+ place = EMSG;
67
+ return -1;
68
+ }
69
+
70
+ place = argv[optind];
71
+
72
+ if (place[0] != '-')
73
+ {
74
+ place = EMSG;
75
+ return -1;
76
+ }
77
+
78
+ place++;
79
+
80
+ if (place[0] && place[0] == '-' && place[1] == '\0')
81
+ { /* found "--" */
82
+ ++optind;
83
+ place = EMSG;
84
+ return -1;
85
+ }
86
+
87
+ if (place[0] && place[0] == '-' && place[1])
88
+ {
89
+ /* long option */
90
+ size_t namelen;
91
+ int i;
92
+
93
+ place++;
94
+
95
+ namelen = strcspn(place, "=");
96
+ for (i = 0; longopts[i].name != NULL; i++)
97
+ {
98
+ if (strlen(longopts[i].name) == namelen
99
+ && strncmp(place, longopts[i].name, namelen) == 0)
100
+ {
101
+ if (longopts[i].has_arg)
102
+ {
103
+ if (place[namelen] == '=')
104
+ optarg = place + namelen + 1;
105
+ else if (optind < argc - 1)
106
+ {
107
+ optind++;
108
+ optarg = argv[optind];
109
+ }
110
+ else
111
+ {
112
+ if (optstring[0] == ':')
113
+ return BADARG;
114
+ if (opterr)
115
+ fprintf(stderr,
116
+ "%s: option requires an argument -- %s\n",
117
+ argv[0], place);
118
+ place = EMSG;
119
+ optind++;
120
+ return BADCH;
121
+ }
122
+ }
123
+ else
124
+ {
125
+ optarg = NULL;
126
+ if (place[namelen] != 0)
127
+ {
128
+ /* XXX error? */
129
+ }
130
+ }
131
+
132
+ optind++;
133
+
134
+ if (longindex)
135
+ *longindex = i;
136
+
137
+ place = EMSG;
138
+
139
+ if (longopts[i].flag == NULL)
140
+ return longopts[i].val;
141
+ else
142
+ {
143
+ *longopts[i].flag = longopts[i].val;
144
+ return 0;
145
+ }
146
+ }
147
+ }
148
+
149
+ if (opterr && optstring[0] != ':')
150
+ fprintf(stderr,
151
+ "%s: illegal option -- %s\n", argv[0], place);
152
+ place = EMSG;
153
+ optind++;
154
+ return BADCH;
155
+ }
156
+ }
157
+
158
+ /* short option */
159
+ optopt = (int) *place++;
160
+
161
+ oli = strchr(optstring, optopt);
162
+ if (!oli)
163
+ {
164
+ if (!*place)
165
+ ++optind;
166
+ if (opterr && *optstring != ':')
167
+ fprintf(stderr,
168
+ "%s: illegal option -- %c\n", argv[0], optopt);
169
+ return BADCH;
170
+ }
171
+
172
+ if (oli[1] != ':')
173
+ { /* don't need argument */
174
+ optarg = NULL;
175
+ if (!*place)
176
+ ++optind;
177
+ }
178
+ else
179
+ { /* need an argument */
180
+ if (*place) /* no white space */
181
+ optarg = place;
182
+ else if (argc <= ++optind)
183
+ { /* no arg */
184
+ place = EMSG;
185
+ if (*optstring == ':')
186
+ return BADARG;
187
+ if (opterr)
188
+ fprintf(stderr,
189
+ "%s: option requires an argument -- %c\n",
190
+ argv[0], optopt);
191
+ return BADCH;
192
+ }
193
+ else
194
+ /* white space */
195
+ optarg = argv[optind];
196
+ place = EMSG;
197
+ ++optind;
198
+ }
199
+ return optopt;
200
+ }