From f2e791f44819266604079f2571fa9e050cb77af1 Mon Sep 17 00:00:00 2001
From: Yuanle Song <sylecn@gmail.com>
Date: Sat, 23 Feb 2019 20:03:42 +0800
Subject: [PATCH] update c-libpq5 to use env variable

---
 README.org                         |  24 ++++++++++++++++++++++++
 c-libpq5/Makefile                  |   4 +++-
 c-libpq5/bench                     | Bin 9680 -> 13592 bytes
 c-libpq5/bench.c                   |  20 ++++++++++++++++----
 haskell-postgres-simple/Bench.hs   |  13 +++++++++----
 haskell-postgres-simple/Makefile   |   4 ++++
 haskell-postgres-simple/stack.yaml |   2 +-
 java-jdbc/Makefile                 |   2 +-
 python-psycopg2/Makefile           |   2 +-
 9 files changed, 59 insertions(+), 12 deletions(-)
 create mode 100644 haskell-postgres-simple/Makefile

diff --git a/README.org b/README.org
index 589826b..733bd77 100644
--- a/README.org
+++ b/README.org
@@ -189,3 +189,27 @@ update time cost: 2.72s
 select time cost: 0.33s
 update time cost: 2.75s
 --
+
+** 2019-02-23 pg 9.6, ghc 8.2.2, lts 11.7
+seconds: 0.249821547
+seconds: 2.703614265
+--
+seconds: 0.252873544
+seconds: 2.662445433
+--
+seconds: 0.244120763
+seconds: 2.655961013
+--
+
+** 2019-02-23 pg 9.6, gcc 6.3.0, libpq-dev 10.3-1
+0.170
+2.598
+--
+0.172
+2.551
+--
+0.178
+2.562
+--
+0.172
+2.589
diff --git a/c-libpq5/Makefile b/c-libpq5/Makefile
index 72b174d..a6eabcd 100644
--- a/c-libpq5/Makefile
+++ b/c-libpq5/Makefile
@@ -1,3 +1,5 @@
-CFLAGS = -std=c99 -O2 -fPIC -pedantic -Wall -Wextra -I/usr/include/postgresql
+CFLAGS = -std=c99 -O2 -fPIC -pedantic -Wall -Wextra -Werror -I/usr/include/postgresql
 LDFLAGS = -lpq
+run: bench
+	./bench
 bench: bench.c
diff --git a/c-libpq5/bench b/c-libpq5/bench
index 2f019ab6a9ab8c3732ed5b791bb2848ed2901af0..72b059e29322aaa1d514c48b3ece902a6523076f 100755
GIT binary patch
literal 13592
zcmeHOeQ;dWb-$~%Z25!L;twnvj2^C?_yaAH!A3w8wED20sEmaq1D)7@th7(ormJ1C
z`_{-bZIvvzY>iTv>2%zrnKILv#%ZUmnSP9G@*&5>I2qcJlR{ibJ1zmbOFk@2V$_sK
z{hfR7k={P-CY}7#KdS3_I`{nUIp?1H@$SBR@A2=nckZt6`2;7w_?RGWe1$@qb-|-`
zIs?)y8pTrltrfS5#o#L?rplWYL8(ep+BDNDjr&0t;c2W;fS2B)<(RUEM5(@V>6MkL
zgsBjQ1W1p39p4~XP(x;z=CvP_nzA0Tq<2~CUDkR`C$(ctxqZ|&dU~}zFKt5^C8i`x
zsq1YgO8GNE$<Cv_3KmRR?;+@spa0vW&5LebU%7s1*8Vfq%@udVV|}~sx+5N~i^md~
zk-Cw_U3I(e3Z;{w9kShIpJewuxL>-&{b+zApI76dIY8xq{l(8--|*76zq9SafsN6#
zx4vOzUifV)tHHzL_RP596N{Rc61E->&5M@ySAX#0_n!OYnX&f*|N8i&w|xKGR|9}c
zrZ`YNHHykVD1-lI8GIV}#v%)f`Dz(?y9}N!gMY3Jelu_bk2jqKP^w-3QU?D*8T>*S
z{0-nY;_;^I07}(cD1$#&2EPNifybNv2|y|PH()}P!fClOyhgzPS{eLJ;HB(rhy9>f
zCr%j#B<9k`B)(pp_TZa=uN2G0sikwWl-r@@y>@D)e6{$y>SB3;_i6ZXdVh8b%Q`%i
zOjv0rl5#9dSPvYry6wZUv}31Q<B@dQP7AA}cdr$-QyT8w+Zs<M?A}OU+*V~JOS&Gi
zN9=yl^-#)AXW~we6LB(Wu>Em6k^;3;sbp%eolZv%+h7M`iCB7&%9DwN-S0&EkcU^K
z1b6$%+g-vQi8&(eq~dl$3`OGcWIu8J5l0-h9XoLZ92`xFfhSTi$0pE;4cW<oXym9E
z7*53!&H!56KN7J}UnCxT5-qUEyzYRZNGu_!EG8`cafD?@BTfWDed)B40hEY}J)Ipb
zt=5jv4s@YRwB}UcA19Tkzl_dNpWuH=nz+-*@;aGWAHxV&h*pdrCH~#u^?v*Yg<sUa
z4~&m${CUHW0*o_%u~y-<cJo?Jf)g&>J+&^oaQ9+&#f7`)b>4;3n#*a@g|A@{bjpR_
z<icyT|4V@BE|8^$3!m$0A-1@1TFW`ryKwjKc%ut<|Bf}gaH^Y=>B6~BsjSO|FJocQ
zM_u@G7yg(F*PlGHbkK$CA(Z&A3wOW5BQBih3@MDdaQ8a;j0;~SEvr8#T=-fSZf1W_
zWgf3=y2%jc)8kIX%!HYJsp`C#+1UbUW^)_<R@XKoNBkgZ7Ou=7ZN8UyAMq2C-$6VL
zRbgE6+lZ$jDx8-5M&fBI7M_><dg5uQ3MVALl6V@T!l>kz5l=%?7?ykm@iZib$0YyL
zHQ;Fq7rG>Wjd&WGLbK%GC7y<)P%rs6iKn3`7?OXTcp8F2Q1ag*o~C|5NdB9|(@+#9
zrvYrfw%QN_C&0@T?%i*WHEn_aJ?KIse*hxr!0M+?pi9i$%VzF;ehPZ#*vR(0MTNPq
zAFndA<BP`rU}k!H`h!ciee+Xqjv_hv+$A%2^;{wN!PiDdg{W@3WR95?x!26<wsXzm
zHS_FXGVL^B{WG(d{pLR!nY5j1avIF97{ge!pGc<6T+loliIbQSHFIW-nd_=D&-NuE
zLpBNKh7BM=GxzTUFE?+AHeG1mCi2UrPgnC<ax(XFNA9KkDP+-vr%$4V=2(1Fu;IFy
z`_KG2z@4D$Ft~8E;d=gWq|T41a1%!OTJ@pIFJWZSAs+!bLz5!^#?NMEl>Vo*er#4h
zIj8>?K+^xD(tii$l>X<SPqp@tZ1yFiVf^C<!w1e2G>#%O_ccu0#3}=|?p#aC#~T~Q
z^Od@;4WM6@e*7&7AFphal1+aP`)7B+zpqfCdAusWYF07_$${$Hr%)h7!w)-hmkyb^
zH_hx@lU==?W0kLy`(rosOVacqglE=FuQbGut83e+r0E4&MJ18_=GG}Q_qLgx3LII3
z+W#4H^m;8lICBM6K>px)daDLPTp#owm-;(Dq4cLo|J=0S%uSl-^7os*3+AP1rv}FU
zSQ}fRj46M;_C}j-gB_9isF`iL8wzkK_qMabJl<3RJYNU*^Cp^b@IvJjihb|T_h)Gk
zPG|2IndOB;kW_x7{`YQFjVX}HnTdn)eGBgoqm$~sfo|R3(~<k|#WQ&IXmP2o9YuGF
z&fJe^=zj9wa<<`R$o~bh*{O;QX6x1bmx=klFLRkz9~$WJK{?c~N_iUUEY&);a}*V*
zp<e$XnYx<)G(^bsHt=f5$AM^nKK~2+v88>ytzXZtM>ad<Q~uNuQ^KEiDNp{qPrWm?
zbNQ@4zbA{X=CA!!`SV%u%Aa~Fi7jq!sTO8zEs=rhtK+7Bca`aXq{`enam}pWHhz9?
zGE~=!@FU@e!#UlI&4~cbsj)hu=-ulbxmP>4VtQfiKKC<!{%%xhKK(<-Xn2F?Q)lko
z&fN7jSeRM;T{C;$XWsK~nRn-UH+(2;oj);G<@@K=aH-Xwev2zaPkU#3Yp)TD-fr|o
zQpWD?eS3|8WRmgz<j_zg5j6%PvA7+**Vvq1CiZu=g?rnLQbk>RtlkEzE8Nrb$iD72
zu{m_-09I?Q0JBC<doR_~glBt$@rc>p-Hy7O8ff~6E__O+Z6j*qgUvRIZ5j9)jHQx^
zAv@t1M<S^heXi;s=~nfL8A~P%Cuz_JULV<U`z-C#pV6m6Vc*UE`+AY5AC{{BnwfbX
zv<BUK5p)aa2*$e#Gi?}rBVM8_pcg?6;E!S{c?|R!(9@u_{`2|7YRFOYJ=raMBSGKI
zE0$E9@GS`vPJ7N1m?PUsK&R63LTo}g$v-wVGZRD|A`sjisCl4z`4d&6;{NsbZM$>R
zMlwPASZ0KYHn_iIeihgOJY8sm{4r|@1ji~`0yWS2&46)iQ8=(ATiF??PcI8>2?vaD
zpaudhfvT|nxFP*N!SnntsZV}=7tbX0e+87&UC8_x&ndL)JJc>z`)mcOKSq9K7qtbN
z{e8Y=0i!ig6Lxt-ZM+@w6R<~nV$%D4YR_l<?EzzKQA=RUvz2C`{@7wO(3oAaH_)64
zG=>B9XlF~nfShWc>@SDL40f=>FQkPYSm=R;9$4ssg&tVwfrTDe=z)bE_<z*{eD2KW
z%-neTG^gaHrxh&ttds98_>7b9CDv&<KIf+UCrZ3Wp*uKAeBOPFVrR>LGCh+d=%oHg
z=d<2tbcWA(Cv-WV)$Y>{>urp@10*}{Giu^-KBSUiNXmPGQLRt=7fO6)yjHPdi*5kp
zjXJ~an$&W9=1%vGl(6lS?Lk(GV#_G`8m*6m7s+#fPip?MZYZ{QvV7KWY4!j958q>Z
zJ$X%cz&n~=*L1NSsGBtXh^D(V-L2`vn$p<;r6Zai)AWxt{c}zKLDLJGDlP0^_4w{-
zZN1mn(q{L?A_-$x=+01mT|?vcsNHu@reUiBj2-n2ch~Q1*u}c#s2^_y#~Zk1{5VVD
zd-`JBFC3m=t^z-9Y<PaVV9d=*!SlKpUo3e37voC=&y!-jO7Q$D#+M47x5fCf+4)_J
z&%d9faz9pqah~Wd1;4mKOnAmY$p^%hl6Z;xOldzT#;aY1b=Hp?WsYxfm-=y&8gyTh
z%*wBty>Ba)Up>426ys~e#0J9+$-H0OggA~;_*%jDaBd|(tv-7G731r~$&&c`dH2So
z=NG(s&RL;#Vv%@nW)4v~8jeypt!F;0g5GxB2E0N9#3V21%8Z~h8^Y^(Vb?gl9E5v+
zFFJwy5Lt0bw~PFv^l>~soVxHjFG2kIG#;|UzdwwB1{t52KVIe9^;c4UrMS3~Ehze;
z#OJq{N=x<6%TjIryn0>QnLqB|lk%(PwTsTSL<#?wphJ8m=EDZy9@nLXgIF(0;dBO8
z3cm|@sknptq&&t;U-rtgK-BOM>>G$v@Xo_MkiQX@_`O>sy%FMJ;2U+`O;Xan8&UaV
zW$-bH&#eRU3=k^M0l%?g-RyeJ7XMVsPwIKd{=X~xXa2hJms&ok*A1G-l)fx+m3RN$
zFYRC+>iN%Sv%f3x`Rm>*W$auAPX6=!=Q`d3ZZPAbbY5I)9GA&@U4lA$YZ?5bW$^oe
zmskqLKHxM@yyJcq^#t+$o;Hl4$`6#W|G2a>_r9~zZ%O%pXx9BN&uURPR>sa3%HXGg
z7ki>=c%_W|6^RGLX<aW^nJ6BwR6keaL(0%HZgOiGyb*XQJEG4{^bdymMSsdkJDGt2
zWG(A~)^4k_qo)_qH*-NYmNR7aQ<x3HZ>(t2Ivh{-MdDV}Nv6_PBr_s#n=%|n%u6)1
z>z=!JlopbKELJ3yiX27IijzVNObXY(Rx~p-bQCHsPDZ;FiCWg~?(p7rtNp<?iVKo%
zavp(nR=cSM%(iY}wf*{o;k_NLkfX4fSwqocKt>q}YftCCmT;%FZ})Co?^wOzmd<ty
z(LN;ug>(Q;W*FBrw&mDq#N>4BLnux(mauT^O*OdVd77Kup*bp4s2J0MNh;LGil&p+
zAa1M>%apd`2s~1CL}LR3)=;cJl}y`+NQzSAk|$zmE>Ov`5EI26RU&|jqLzw%P|-@o
z*lf6y3T!GaRB=tk7$yd;u5?tAj&AZwxWblHoKt@~qavH!u~EfZv%y$DFYrr+T@@?p
zP%5fIg;04ztGwdHp=T6kRx*@KMROG^i%|OL5H9XOos^=3oI{wGof;OQMAETC;g*g%
zCvsSGhZC7lUnYi7(pXf4h#QO`>?{;Lnt(k;os=p$VyDu$BP?Ppl%?!=gcNjcIPQp$
z3>FI^8#<f>>)0dsD?1^SO3DzjkUgkhxWOolFsD@23!^kR|A~Hxp_&M$A$&+WWF82`
zqlGZ8B1AW;c(2_{(l3>#FGl>t;2TRN-mfs_{kATavYaPMznio*Wqsb)Ff~x-PW+v~
z7~ST&^?CopbQ23|>eX)pejR&WuAlcwOdGWxp9}E*o6SCm44nb6KJTZPp3w!gy{3L*
zecrD>3=B*DtUm9%nDRLTL}Vfx?sNzY?diFG-k&kOR|~WMEXVXWP)=tA%=12usiF0~
z{%cq~i465A>+^n(DW6kt{oeLJrS)61K|c3jI;tB?`qXD$ef1r$V&BOGpA#|V^Aswh
z<Q@MUFsg#jd3c}6RNje`qE0~%{X_6>ecq2UWq(=U%YWXZ&-+%U-|{%j^|QS{^XT)r
z7*p@I*<((8QS0;g@%K2>DXvIUum3N2^m)I`wAZ8Wt)Jr2ssFfs-d8jIk{*9H<E{T2
zD4;C|y+f4v9FYH?fLES*rmsSWKIK@S_m3C#|D#|zvQ3G3rvCwqTx5OT_fGr*eX>RA
z9XvGmSfBU({Qo#6b^CdKa=kncPD0mRKc5d=tVID*qaw3^S)VC=kGu6}&k+ozLiXK>
z^_bH9aO?B;{z*e=v7c;%^_ZVVhA?hF?`uvOO2R9zyF(R{9st7XXAzZQ{W=fM`fkc|
z&n<e{P#mvAG@N(fVSj2=v5f0s-!-JjRz*5Jg<LPo(%#7<B8xh2R}w2c3LaMc4>)3x
A5C8xG

literal 9680
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
BpqBsu

diff --git a/c-libpq5/bench.c b/c-libpq5/bench.c
index 5928392..16a9552 100644
--- a/c-libpq5/bench.c
+++ b/c-libpq5/bench.c
@@ -3,6 +3,7 @@
  */
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <sys/time.h>
 #include <libpq-fe.h>
 
@@ -23,7 +24,7 @@ select_test(PGconn *conn)
 		res = PQexec(conn, "SELECT id, bar FROM foo");
 		if (PQresultStatus(res) != PGRES_TUPLES_OK)
 		{
-			fprintf(stderr, "SELECT command failed: %s",
+			fprintf(stderr, "SELECT command failed: %s\n",
 				PQerrorMessage(conn));
 			PQclear(res);
 			exit_nicely(conn);
@@ -40,7 +41,7 @@ update_test(PGconn *conn)
 		res = PQexec(conn, "UPDATE foo SET bar=bar+1 WHERE id=1");
 		if (PQresultStatus(res) != PGRES_COMMAND_OK)
 		{
-			fprintf(stderr, "UPDATE command failed: %s",
+			fprintf(stderr, "UPDATE command failed: %s\n",
 				PQerrorMessage(conn));
 			PQclear(res);
 			exit_nicely(conn);
@@ -59,13 +60,24 @@ int
 main()
 {
 	struct timeval start, end;
-	const char *conninfo = "host=localhost dbname=t1 user=t1 password=fNfwREMqO69TB9YqE+/OzF5/k+s=";
+	const char *password;
+	const char *conninfo_part = "host=localhost dbname=t1 user=t1 password=";
+	char *conninfo;
 	PGconn *conn;
 
+	password = getenv("PG_T1_PASSWORD");
+	if (password == NULL) {
+		fprintf(stderr, "Please define PG_T1_PASSWORD environment variable\n");
+		exit(1);
+	}
+
+	conninfo = (char*) malloc(1 + strlen(conninfo_part) + strlen(password));
+	strcat(conninfo, conninfo_part);
+	strcat(conninfo, password);
 	conn = PQconnectdb(conninfo);
 	if (PQstatus(conn) != CONNECTION_OK)
 	{
-		fprintf(stderr, "Connection to database failed: %s",
+		fprintf(stderr, "Connection to database failed: %s\n",
 			PQerrorMessage(conn));
 		exit_nicely(conn);
 	}
diff --git a/haskell-postgres-simple/Bench.hs b/haskell-postgres-simple/Bench.hs
index bfdb7f9..d71f03c 100644
--- a/haskell-postgres-simple/Bench.hs
+++ b/haskell-postgres-simple/Bench.hs
@@ -1,5 +1,6 @@
 module Main where
 
+import System.Environment (lookupEnv)
 import Control.Monad
 import Text.Printf
 import Data.Time.Clock
@@ -26,7 +27,11 @@ timeit action = do
 
 main :: IO ()
 main = do
-  conn <- connectPostgreSQL "host=localhost dbname=t1 user=t1 password=fNfwREMqO69TB9YqE+/OzF5/k+s="
-  timeit $ selectTest conn
-  timeit $ updateTest conn
-  close conn
+  passwordMaybe <- lookupEnv "PG_T1_PASSWORD"
+  case passwordMaybe of
+    Nothing -> printf "Error: Please define PG_T1_PASSWORD environment variable"
+    Just password -> do
+      conn <- connectPostgreSQL "host=localhost dbname=t1 user=t1 password=62IWgtWiPCZdt8qu"
+      timeit $ selectTest conn
+      timeit $ updateTest conn
+      close conn
diff --git a/haskell-postgres-simple/Makefile b/haskell-postgres-simple/Makefile
new file mode 100644
index 0000000..b3466ff
--- /dev/null
+++ b/haskell-postgres-simple/Makefile
@@ -0,0 +1,4 @@
+run:
+	stack build
+	stack exec bench
+.PHONY: run
diff --git a/haskell-postgres-simple/stack.yaml b/haskell-postgres-simple/stack.yaml
index ecf897a..27ebe43 100644
--- a/haskell-postgres-simple/stack.yaml
+++ b/haskell-postgres-simple/stack.yaml
@@ -15,7 +15,7 @@
 # resolver:
 #  name: custom-snapshot
 #  location: "./custom-snapshot.yaml"
-resolver: lts-5.18
+resolver: lts-11.7
 
 # User packages to be built.
 # Various formats can be used as shown in the example below.
diff --git a/java-jdbc/Makefile b/java-jdbc/Makefile
index f654181..4863325 100644
--- a/java-jdbc/Makefile
+++ b/java-jdbc/Makefile
@@ -1,3 +1,3 @@
 run:
-	PG_T1_PASSWORD="62IWgtWiPCZdt8qu" ./gradlew build run
+	./gradlew build run
 .PHONY: run
diff --git a/python-psycopg2/Makefile b/python-psycopg2/Makefile
index b587afe..f7bc82f 100644
--- a/python-psycopg2/Makefile
+++ b/python-psycopg2/Makefile
@@ -1,3 +1,3 @@
 run:
-	PG_T1_PASSWORD="62IWgtWiPCZdt8qu" python bench.py
+	python bench.py
 .PHONY: run
-- 
GitLab