Skip to content

Commit 38ecaa4

Browse files
committed
encode json body in binary, using modified hasql dep
- switch from "unknown" parameter in text format to a "json" parameter in binary format (no dependency update required) - use a lazy bytestring "json" encoder (via updated hasql)
1 parent efd65ff commit 38ecaa4

6 files changed

Lines changed: 106 additions & 34 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ This project adheres to [Semantic Versioning](http://semver.org/).
1414

1515
- #1385, Deprecate bulk-calls when including the `Prefer: params=multiple-objects` in the request. A function with a JSON array or object parameter should be used instead for a better performance.
1616

17+
### Changed
18+
- #2261, #2349, #2467, Reduce allocations communication with PostgreSQL, particularly for request bodies. - @robx
19+
1720
## [10.0.0] - 2022-08-18
1821

1922
### Added

nix/overlays/haskell-packages.nix

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,29 @@ let
2929
# To fill in the sha256:
3030
# update-nix-fetchgit nix/overlays/haskell-packages.nix
3131

32-
hasql = lib.dontCheck prev.hasql_1_6_0_1;
32+
hashtables = lib.dontCheck prev.hashtables_1_3;
33+
isomorphism-class = lib.unmarkBroken prev.isomorphism-class;
34+
text-builder = lib.dontCheck prev.text-builder_0_6_7;
35+
text-builder-dev = lib.dontCheck prev.text-builder-dev_0_3_3;
36+
37+
postgresql-binary = lib.dontCheck
38+
(prev.callHackageDirect
39+
{
40+
pkg = "postgresql-binary";
41+
ver = "0.12.5";
42+
sha256 = "1vk97lw25i7d0pvjzd7s3m13nya9ycnrjr8y4qhw2jgjnvkblnzv";
43+
}
44+
{ });
45+
46+
hasql = lib.dontCheck
47+
(prev.callHackageDirect
48+
{
49+
pkg = "hasql";
50+
ver = "1.6.1.1";
51+
sha256 = "1sv0500dvfln9ljxkd2jrfl9nbpkax7z5b8zjy9yjps1r6s1cmj0";
52+
}
53+
{ });
54+
3355
hasql-dynamic-statements = lib.dontCheck prev.hasql-dynamic-statements_0_3_1_2;
3456
hasql-transaction = lib.dontCheck prev.hasql-transaction_1_0_1_2;
3557

@@ -38,7 +60,7 @@ let
3860
{
3961
pkg = "hasql-notifications";
4062
ver = "0.2.0.3";
41-
sha256 = "sha256-x8EGEMVYSw4O1Kn6MxOB+/3y3ITxqESDfrYgM8B1hOw=";
63+
sha256 = "1v44fp03685ngs1l9a7ihkfg5zgvh49k7ym9sh70wjsqql80dhf7";
4264
}
4365
{ });
4466

@@ -47,7 +69,7 @@ let
4769
{
4870
pkg = "hasql-pool";
4971
ver = "0.8.0.2";
50-
sha256 = "sha256-9GE9qyymTLXw4ZW6LbNnn4T2tCgNYVEuBIPcUA83xCg=";
72+
sha256 = "0a646w7m1p430hp52q8d52sgd14zcyrjvflmw7qbak565jmksqgl";
5173
}
5274
{ });
5375

@@ -56,8 +78,8 @@ let
5678
(super.fetchFromGitHub {
5779
owner = "PostgREST";
5880
repo = "postgresql-libpq";
59-
rev = "cef92cb4c07b56568dffdbf4b719258b82183119"; # master as of 2022-09-05
60-
sha256 = "sha256-BWXfGHhcNuOGdFRxDshbcnxaRTDwEC1Eswwf8jOdqWQ=";
81+
rev = "cef92cb4c07b56568dffdbf4b719258b82183119"; # master
82+
sha256 = "0r59klrz47qcnd22s47h612mlz3jbg40wwalfj3f6djwg0cdyr85";
6183
})
6284
{ });
6385
} // extraOverrides final prev;

postgrest.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ library
8585
, cookie >= 0.4.2 && < 0.5
8686
, either >= 4.4.1 && < 5.1
8787
, gitrev >= 1.2 && < 1.4
88-
, hasql >= 1.6 && < 1.7
88+
, hasql >= 1.6.1.1 && < 1.7
8989
, hasql-dynamic-statements >= 0.3.1 && < 0.4
9090
, hasql-notifications >= 0.1 && < 0.3
9191
, hasql-pool >= 0.8.0.2 && < 0.9

src/PostgREST/Query/SqlFragment.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ normalizedBody body =
128128
"END AS val",
129129
"FROM pgrst_payload)"])
130130
where
131-
jsonPlaceHolder = SQL.encoderAndParam (HE.nullable HE.unknown) (LBS.toStrict <$> body) <> "::json"
131+
jsonPlaceHolder = SQL.encoderAndParam (HE.nullable HE.jsonLazyBytes) body
132132

133133
singleParameter :: Maybe LBS.ByteString -> ByteString -> SQL.Snippet
134134
singleParameter body typ =

stack.yaml

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,23 @@ nix:
1010
pure: false
1111

1212
extra-deps:
13-
- HTTP-4000.3.16@sha256:6042643c15a0b43e522a6693f1e322f05000d519543a84149cb80aeffee34f71,5947
14-
- configurator-pg-0.2.6@sha256:cd9b06a458428e493a4d6def725af7ab1ab0fef678fbd871f9586fc7f9aa70be,2849
15-
- hasql-1.6.0.1@sha256:adb92e68a3741f422a3bb776a12d5cf2bb83303778f343106f9a1cc2b4fcdf73,6628
16-
- hasql-dynamic-statements-0.3.1.2@sha256:417aa533c84f074e2fa16bb2c4d4231326aa512097dd1025d915388e56acd1eb,2675
17-
- hasql-implicits-0.1.0.5@sha256:d16aacad6dc21428d72447d3ae8bcc03839a2f0aa1ec29c797ed9aca4609f9af,1361
18-
- hasql-notifications-0.2.0.3@sha256:aca3f7ee847a8f0b7ef6f989dc48f4a094a06c1a34e92aa3c8bb230085966ea6,2027
19-
- hasql-pool-0.8.0.2@sha256:15473f336c2bd1da161cd03635841f38b0c177d7b8662762c8708c239a428f04,1907
20-
- hasql-transaction-1.0.1.2@sha256:297b158cd1f0727f9b0e175bd7d3741c1bcb725a8094956d0ee79b41aafdb30a,2890
21-
- lens-aeson-1.1.3@sha256:52c8eaecd2d1c2a969c0762277c4a8ee72c339a686727d5785932e72ef9c3050,1764
22-
- optparse-applicative-0.16.1.0@sha256:418c22ed6a19124d457d96bc66bd22c93ac22fad0c7100fe4972bbb4ac989731,4982
23-
- protolude-0.3.2@sha256:2a38b3dad40d238ab644e234b692c8911423f9d3ed0e36b62287c4a698d92cd1,2240
24-
- ptr-0.16.8.2@sha256:708ebb95117f2872d2c5a554eb6804cf1126e86abe793b2673f913f14e5eb1ac,3959
13+
- HTTP-4000.3.16
14+
- configurator-pg-0.2.6
15+
- hashable-1.4.1.0
16+
- hashtables-1.3
17+
- hasql-1.6.1.1
18+
- hasql-dynamic-statements-0.3.1.2
19+
- hasql-implicits-0.1.0.5
20+
- hasql-notifications-0.2.0.3
21+
- hasql-pool-0.8.0.2
22+
- hasql-transaction-1.0.1.2
23+
- isomorphism-class-0.1.0.6
24+
- lens-aeson-1.1.3
25+
- optparse-applicative-0.16.1.0
26+
- postgresql-binary-0.12.5
27+
- protolude-0.3.2
28+
- ptr-0.16.8.2
29+
- text-builder-0.6.7
30+
- text-builder-dev-0.3.3
2531
- git: https://github.com/PostgREST/postgresql-libpq.git
2632
commit: 33ff97db570b5b432255f5f24a68db51453f6eb8

stack.yaml.lock

Lines changed: 56 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,92 +3,133 @@
33
# For more information, please see the documentation at:
44
# https://docs.haskellstack.org/en/stable/lock_files
55

6-
76
packages:
87
- completed:
98
hackage: HTTP-4000.3.16@sha256:6042643c15a0b43e522a6693f1e322f05000d519543a84149cb80aeffee34f71,5947
109
pantry-tree:
1110
size: 1428
1211
sha256: b73a7f6d21cf20bbf819e19039409c9010efb5000d2b72cdd8fd67a9027c14e8
1312
original:
14-
hackage: HTTP-4000.3.16@sha256:6042643c15a0b43e522a6693f1e322f05000d519543a84149cb80aeffee34f71,5947
13+
hackage: HTTP-4000.3.16
1514
- completed:
1615
hackage: configurator-pg-0.2.6@sha256:cd9b06a458428e493a4d6def725af7ab1ab0fef678fbd871f9586fc7f9aa70be,2849
1716
pantry-tree:
1817
size: 2463
1918
sha256: 97efe7a22afc93033bda5adcffdabc0f1c30dc32b2c3ba02114ce7cd74c942fd
2019
original:
21-
hackage: configurator-pg-0.2.6@sha256:cd9b06a458428e493a4d6def725af7ab1ab0fef678fbd871f9586fc7f9aa70be,2849
20+
hackage: configurator-pg-0.2.6
21+
- completed:
22+
hackage: hashable-1.4.1.0@sha256:50b2f002c68fe67730ee7a3cd8607486197dd99b084255005ad51ecd6970a41b,5019
23+
pantry-tree:
24+
size: 1248
25+
sha256: 9af2f7a42674f7effcabbebc043f97057240783f1709338a77f58216f4a5f18c
26+
original:
27+
hackage: hashable-1.4.1.0
2228
- completed:
23-
hackage: hasql-1.6.0.1@sha256:adb92e68a3741f422a3bb776a12d5cf2bb83303778f343106f9a1cc2b4fcdf73,6628
29+
hackage: hashtables-1.3@sha256:ab21804fdafbbd8ad918b2911dabb729ae0ea891780fe66bf7804cbcd07edadf,10379
30+
pantry-tree:
31+
size: 2895
32+
sha256: e71f113ad989dbc994e0fb52bcc219d62930de9afa8b3441bf7909e864481b33
33+
original:
34+
hackage: hashtables-1.3
35+
- completed:
36+
hackage: hasql-1.6.1.1@sha256:948a2137308cc5354e4997bc3666753867124cd25db792424cb9614b1c1b44cf,6626
2437
pantry-tree:
2538
size: 2622
26-
sha256: c7b9df36feb75fe43c4e3804ba1eb61e37a39fa97173c5eed35245b17d10fd8e
39+
sha256: 28d21bf061522fc513f040e9c383b90532222b7258216cc094e07736add8be10
2740
original:
28-
hackage: hasql-1.6.0.1@sha256:adb92e68a3741f422a3bb776a12d5cf2bb83303778f343106f9a1cc2b4fcdf73,6628
41+
hackage: hasql-1.6.1.1
2942
- completed:
3043
hackage: hasql-dynamic-statements-0.3.1.2@sha256:417aa533c84f074e2fa16bb2c4d4231326aa512097dd1025d915388e56acd1eb,2675
3144
pantry-tree:
3245
size: 595
3346
sha256: 91696d3f3e0ef3254772ae5a8e4e89be68285febb49b302ed83d85ac4037a417
3447
original:
35-
hackage: hasql-dynamic-statements-0.3.1.2@sha256:417aa533c84f074e2fa16bb2c4d4231326aa512097dd1025d915388e56acd1eb,2675
48+
hackage: hasql-dynamic-statements-0.3.1.2
3649
- completed:
3750
hackage: hasql-implicits-0.1.0.5@sha256:d16aacad6dc21428d72447d3ae8bcc03839a2f0aa1ec29c797ed9aca4609f9af,1361
3851
pantry-tree:
3952
size: 264
4053
sha256: 0451b99a0a1d02db673d0c40acdf60d4e769e15852eed9e8dc05bffaf43efb70
4154
original:
42-
hackage: hasql-implicits-0.1.0.5@sha256:d16aacad6dc21428d72447d3ae8bcc03839a2f0aa1ec29c797ed9aca4609f9af,1361
55+
hackage: hasql-implicits-0.1.0.5
4356
- completed:
4457
hackage: hasql-notifications-0.2.0.3@sha256:aca3f7ee847a8f0b7ef6f989dc48f4a094a06c1a34e92aa3c8bb230085966ea6,2027
4558
pantry-tree:
4659
size: 452
4760
sha256: 999f0f2856a00d21f4498a8a58452bbefc4ea972fe2984fd234a68a5fe61d98b
4861
original:
49-
hackage: hasql-notifications-0.2.0.3@sha256:aca3f7ee847a8f0b7ef6f989dc48f4a094a06c1a34e92aa3c8bb230085966ea6,2027
62+
hackage: hasql-notifications-0.2.0.3
5063
- completed:
5164
hackage: hasql-pool-0.8.0.2@sha256:15473f336c2bd1da161cd03635841f38b0c177d7b8662762c8708c239a428f04,1907
5265
pantry-tree:
5366
size: 505
5467
sha256: 495dfdf8b7f7d910e2e8a7a7e8d71c8dbf9d439e048de5bc2a66a762011cbdc2
5568
original:
56-
hackage: hasql-pool-0.8.0.2@sha256:15473f336c2bd1da161cd03635841f38b0c177d7b8662762c8708c239a428f04,1907
69+
hackage: hasql-pool-0.8.0.2
5770
- completed:
5871
hackage: hasql-transaction-1.0.1.2@sha256:297b158cd1f0727f9b0e175bd7d3741c1bcb725a8094956d0ee79b41aafdb30a,2890
5972
pantry-tree:
6073
size: 983
6174
sha256: 3679e6d5c835cc17a8fa0c252b8221e282880044b7219aa1de2531bbd5c40691
6275
original:
63-
hackage: hasql-transaction-1.0.1.2@sha256:297b158cd1f0727f9b0e175bd7d3741c1bcb725a8094956d0ee79b41aafdb30a,2890
76+
hackage: hasql-transaction-1.0.1.2
77+
- completed:
78+
hackage: isomorphism-class-0.1.0.6@sha256:d93da31287359c761953b876354de28381f409c5c50e3241c572a443e50c553d,1703
79+
pantry-tree:
80+
size: 465
81+
sha256: c97f922d1ae8f1a0db4c28fac9383d2716934879e95ff0b2b88ebb861d6fba14
82+
original:
83+
hackage: isomorphism-class-0.1.0.6
6484
- completed:
6585
hackage: lens-aeson-1.1.3@sha256:52c8eaecd2d1c2a969c0762277c4a8ee72c339a686727d5785932e72ef9c3050,1764
6686
pantry-tree:
6787
size: 541
6888
sha256: b31392b78f2a03111c805f4400007778eb93b49f998ab41dfbebaaf9b5526bad
6989
original:
70-
hackage: lens-aeson-1.1.3@sha256:52c8eaecd2d1c2a969c0762277c4a8ee72c339a686727d5785932e72ef9c3050,1764
90+
hackage: lens-aeson-1.1.3
7191
- completed:
7292
hackage: optparse-applicative-0.16.1.0@sha256:418c22ed6a19124d457d96bc66bd22c93ac22fad0c7100fe4972bbb4ac989731,4982
7393
pantry-tree:
7494
size: 2979
7595
sha256: dd092d843091c08691485d68a1908517079b1bc6f3d73928f37635a19dc27fc1
7696
original:
77-
hackage: optparse-applicative-0.16.1.0@sha256:418c22ed6a19124d457d96bc66bd22c93ac22fad0c7100fe4972bbb4ac989731,4982
97+
hackage: optparse-applicative-0.16.1.0
98+
- completed:
99+
hackage: postgresql-binary-0.12.5@sha256:de9da3cba9be541d6c75ae8da2858c33d83dc1b2e0c639b0b9781816b78a91f4,5594
100+
pantry-tree:
101+
size: 1619
102+
sha256: b392337f91031a5b3407393e2f04dfe4e7a28019e88eae6a9370538b90e28c51
103+
original:
104+
hackage: postgresql-binary-0.12.5
78105
- completed:
79106
hackage: protolude-0.3.2@sha256:2a38b3dad40d238ab644e234b692c8911423f9d3ed0e36b62287c4a698d92cd1,2240
80107
pantry-tree:
81108
size: 1594
82109
sha256: a36d2912ac552d950ba4476de7d950b56b82dd28e48b9f4d0efee938f10bc525
83110
original:
84-
hackage: protolude-0.3.2@sha256:2a38b3dad40d238ab644e234b692c8911423f9d3ed0e36b62287c4a698d92cd1,2240
111+
hackage: protolude-0.3.2
85112
- completed:
86113
hackage: ptr-0.16.8.2@sha256:708ebb95117f2872d2c5a554eb6804cf1126e86abe793b2673f913f14e5eb1ac,3959
87114
pantry-tree:
88115
size: 1303
89116
sha256: 557c438345de19f82bf01d676100da2a191ef06f624e7a4b90b09ac17cbb52a5
90117
original:
91-
hackage: ptr-0.16.8.2@sha256:708ebb95117f2872d2c5a554eb6804cf1126e86abe793b2673f913f14e5eb1ac,3959
118+
hackage: ptr-0.16.8.2
119+
- completed:
120+
hackage: text-builder-0.6.7@sha256:efbb3e06107e9c8d1cfe85c963938ca9f375a74379af03da3173be4ef5c37bcf,2364
121+
pantry-tree:
122+
size: 425
123+
sha256: cd0ae197e6f9f3860a8ab71f5b87c4a8452ed1fce2fdfd35e36d68ded6e6648e
124+
original:
125+
hackage: text-builder-0.6.7
126+
- completed:
127+
hackage: text-builder-dev-0.3.3@sha256:79ec422defcc2e5b34f94129c72b98d34b2efc1ed8bbd945ccb8f4f535a892c3,2784
128+
pantry-tree:
129+
size: 724
130+
sha256: 8883631a132438e7892fcb13e89d6bbcdc0ac76c56fbea8df8d7aa482ce81f73
131+
original:
132+
hackage: text-builder-dev-0.3.3
92133
- completed:
93134
name: postgresql-libpq
94135
version: 0.9.4.3

0 commit comments

Comments
 (0)