|
1 | 1 | \set ON_ERROR_STOP on
|
2 | 2 |
|
3 |
| - |
4 | 3 | -- Create a table with a plaintext column
|
5 |
| -DROP TABLE IF EXISTS users; |
6 |
| -CREATE TABLE users |
| 4 | +DROP TABLE IF EXISTS encrypted; |
| 5 | +CREATE TABLE encrypted |
7 | 6 | (
|
8 | 7 | id bigint GENERATED ALWAYS AS IDENTITY,
|
9 |
| - name_encrypted cs_encrypted_v1, |
| 8 | + encrypted_int2 cs_encrypted_v1, |
10 | 9 | PRIMARY KEY(id)
|
11 | 10 | );
|
12 | 11 |
|
13 |
| -TRUNCATE TABLE users; |
14 |
| - |
15 |
| -CREATE index ON users (name_encrypted cs_encrypted_ore_64_8_v1_btree_ops_v1); |
16 | 12 |
|
| 13 | +CREATE index ON encrypted (encrypted_int2 cs_encrypted_ore_64_8_v1_btree_ops_v1); |
17 | 14 |
|
18 |
| --- User with "HIGH" value |
19 |
| -INSERT INTO users (name_encrypted) VALUES ( |
20 |
| - '{ |
21 |
| - "v": 1, |
22 |
| - "k": "ct", |
23 |
| - "c": "high", |
24 |
| - "i": { |
25 |
| - "t": "users", |
26 |
| - "c": "name" |
27 |
| - }, |
28 |
| - "o":"(\"{\"\"(\\\\\"\"\\\\\\\\\\\\\\\\x1212121212125932e28282d03415e7714fccd69eb7eb476c70743e485e20331f59cbc1c848dcdeda716f351eb20588c406a7df5fb8917ebf816739aa1414ac3b8498e493bf0badea5c9fdb3cc34da8b152b995957591880c523beb1d3f12487c38d18f62dd26209a727674e5a5fe3a3e3037860839afd8011f94b49eaa5fa5a60e1e2adccde4185a7d6c7f83088500b677f897d4ffc276016d614708488f407c01bd3ccf2be653269062cb97f8945a621d049277d19b1c248611f25d047038928d2efeb4323c402af4c19288c7b36911dc06639af5bb34367519b66c1f525bbd3828c12067c9c579aeeb4fb3ae0918125dc1dad5fd518019a5ae67894ce1a7f7bed1a591ba8edda2fdf4cd403761fd981fb1ea5eb0bf806f919350ee60cac16d0a39a491a4d79301781f95ea3870aea82e9946053537360b2fb415b18b61aed0af81d461ad6b923f10c0df79daddc4e279ff543a282bb3a37f9fa03238348b3dac51a453b04bced1f5bd318ddd829bdfe5f37abdbeda730e21441b818302f3c5c2c4d5657accfca4c53d7a80eb3db43946d38965be5f796b\\\\\"\")\"\"}\")" |
29 |
| - }'::jsonb |
30 |
| -); |
31 | 15 |
|
| 16 | +-- 99 |
| 17 | + INSERT INTO encrypted (encrypted_int2) VALUES ('{"c": "99", "i": {"table": "encrypted", "column": "encrypted_int2"}, "k": "ct", "m": null, "o": "{\"\\\\\\\\\\\\\\\\x121212121212594be28282d03415e7714fccd69eb7eb476c70743e485e20331f59cbc1c848dcdeda716f351eb20588c406a7df5fb8917ebf816739aa1414ac3b8498e493bf0badea5c9fdb3cc34da8b152b995957591880c523beb1d3f12487c38d18f62dd26209a727674e5a5fe3a3e3037860839afd80132248f0640e89761a123fad8155748d7df6b2c706438ae9990eaae2c53152f6a054114e7c0c43191931fa630315ecf5b2043fec606e98129b60164c904e72c7b89b8112bec8d2434f0b8a2b39d8789aa3d1807aa97eb0f1218975bdafabf63e366718bde853f4e138ec155e3881130596a7ce7f1bf8b4fc8d9cdcaaea967c4971775330759f64b6a6e8f981cbbd6d18cd441e424dd58b7327f0dbd405c1779b74ad537ca1563b5c5eb6419a2c8ddf8c445b8c477a3bbeca05f40c0798040abff80fd48072dfb7a4467dc7a0808ac2c189a1391170ebdf594954c1ab8fd5d966a2ac7bb9136ed566f0d01ff365f51d59af9b92fc760fc70f424be40906e9fdf8b70e228aedb30607d0aad1b48254bdcdfcc096d6eecd09659bccbbf17b28e89eb\"}", "u": "c787c0331d81d7609e828bab7b973ba88c95de0539d1a1d378b4d5cc73c3b875", "v": 1}'); |
32 | 18 |
|
33 |
| --- User with "LOW" value |
34 |
| -INSERT INTO users (name_encrypted) VALUES ( |
35 |
| - '{ |
36 |
| - "v": 1, |
37 |
| - "k": "ct", |
38 |
| - "c": "low", |
39 |
| - "i": { |
40 |
| - "t": "users", |
41 |
| - "c": "name" |
42 |
| - }, |
43 |
| - "o":"(\"{\"\"(\\\\\"\"\\\\\\\\\\\\\\\\x12121212121259bfe28282d03415e7714fccd69eb7eb476c70743e485e20331f59cbc1c848dcdeda716f351eb20588c406a7df5fb8917ebf816739aa1414ac3b8498e493bf0badea5c9fdb3cc34da8b152b995957591880c523beb1d3f12487c38d18f62dd26209a727674e5a5fe3a3e3037860839afd801ff4a28b714e4cde8df10625dce72602fdbdcc53d515857f1119f5912804ce09c6cf6c2d37393a27a465134523b512664582f834e15003b7216cb668480bc3e7d1c069f2572ece7c848b9eb9a28b4e62bfc2b97c93e61b2054154e621c5bbb7bed37de3d7c343bd3dbcf7b4af20128c961351bf55910a855f08a8587c2059a5f05ca8d7a082e695b3dd4ff3ce86694d4fe98972220eea1ab90f5de493ef3a502b74a569f103ee2897ebc9ae9b16a17e7be67415ee830519beb3058ffc1c1eb0e574d66c8b365919f27eb00aa7bce475d7bdaad4ed800f8fc3d626e0eb842e312b0cc22a1ccf89847ebb2cd0a6e18aec21bd2deeec1c47301fc687f7f764bb882b50f553c246a6da5816b78b3530119ea68b08a8403a90e063e58502670563bd4d\\\\\"\")\"\"}\")" |
44 |
| - }'::jsonb |
45 |
| -); |
| 19 | +-- 5 .. 9 |
| 20 | + INSERT INTO encrypted (encrypted_int2) VALUES ('{"c": "5", "i": {"table": "encrypted", "column": "encrypted_int2"}, "k": "ct", "m": null, "o": "{\"\\\\\\\\\\\\\\\\x121212121212591fe28282d03415e7714fccd69eb7eb476c70743e485e20331f59cbc1c848dcdeda716f351eb20588c406a7df5fb8917ebf816739aa1414ac3b8498e493bf0badea5c9fdb3cc34da8b152b995957591880c523beb1d3f12487c38d18f62dd26209a727674e5a5fe3a3e3037860839afd801d7a2a8638edc950e921074126382a46dc1cddd68d653ff67447fb929a057027664983df10ec4fa48ff72805aadcfbf20250bc6734a4c4097f1c7b2e919f787f0069045ca27b9fb6557eda9da508b9c1921c836b4311540f6b565d5743c07c55dd1352efb8c61a6e13f0eef1763a4cd64a34fca99638fd96653e6a83ae728a4520fcd0c08074f55d046dd2c47d7905ef3b1650828a8c7a89a0d35273aa48cda337ec4124f168aeadd425b32bea4b410828e7a67caa9e8c21954a3255ea73b9ef801167db8440daaf33cc0c1069597b0b82157a5adb9cbe87932d4133d83d25c1aab21165a134540bfe8268cdaf7878a6f6473e62ba2f3371c737b5f513d6166194d106df8abfd551767c9d011091614d96301fc8f9e330678c2fd915678cababd\"}", "u": "cdd6248063d3431f3fe010c5728954fd62cbf42b0c515a9991bd4fc673604e26", "v": 1}'); |
| 21 | + INSERT INTO encrypted (encrypted_int2) VALUES ('{"c": "6", "i": {"table": "encrypted", "column": "encrypted_int2"}, "k": "ct", "m": null, "o": "{\"\\\\\\\\\\\\\\\\x121212121212599de28282d03415e7714fccd69eb7eb476c70743e485e20331f59cbc1c848dcdeda716f351eb20588c406a7df5fb8917ebf816739aa1414ac3b8498e493bf0badea5c9fdb3cc34da8b152b995957591880c523beb1d3f12487c38d18f62dd26209a727674e5a5fe3a3e3037860839afd801a6afd969a465c445ab35c15e7ef11eba0411270c2fdd4578aef1155f13e1cba0341a89333540fc98dbdd394db2fdaaa89aa955c6f597c0c71d79cd27934a2db7844a325067a8bfc61949806419742a55b78f90788e881346b91ae242c54ef5ab71e022d4e299beb02faecdd38ea11604a6776f602bf79e9173eeee2ca1ad822fa2a943621cb84e33587a420d3b56f53b2fe9ceea24ccb418db9c98e10362e1f8acc188cdddc7fd9e27f0460f60ceeb30b0b9a3af4c6d9f4ddbf398e8af529c0d18de229ea67b86b1f4a15a6e73d58ade30ebae2bcbadad7383df69e4f7a6c8826d1ba7e2279417259b50a26271278d1078145b7b7bfbf0a94bfe34c39c6247bf982dfb68e0b4f969a10d9ae500d57a901ea717244da6207ed0599d7f2cbdd4f2\"}", "u": "a97ec70e9e4cc5c6888f1f809ec4fa551aff8633d76cfb26bb20997d4d50ca91", "v": 1}'); |
| 22 | + INSERT INTO encrypted (encrypted_int2) VALUES ('{"c": "7", "i": {"table": "encrypted", "column": "encrypted_int2"}, "k": "ct", "m": null, "o": "{\"\\\\\\\\\\\\\\\\x1212121212125948e28282d03415e7714fccd69eb7eb476c70743e485e20331f59cbc1c848dcdeda716f351eb20588c406a7df5fb8917ebf816739aa1414ac3b8498e493bf0badea5c9fdb3cc34da8b152b995957591880c523beb1d3f12487c38d18f62dd26209a727674e5a5fe3a3e3037860839afd801a901168d92ea2d7df254becc59888cf46c1d5faf172e7f95cff290254c3873edef20871a19f2d66c8a139678c5c6829a7b1f9d56fe44ad492b8c45a19d83aeadd84d01e1b095abdab069159ab18db8f457b0bdac457c084d0c67a2e6fcd9423231c9bfd89788ef127032472ae51215536d6b550de87b221037a2a48757805d1a9c1f9df240bf041f95beee31b5d19b626682d4c06f93846572fc87c0f25cf30c4e1b196f25e3f9ae44aebb62eaad2c53fcbfbf07f4f96f408fc329bd6e591e6c2a28907cc26727ba63c0fe355576c2a18ff4d4e98f4f2f991dd2094b5e4477f8cdcf4e43b6d49a571aa580f3910762bb8c7a45032a1f1f40bfd93b032722140f268afd4dae03ef06bcf9fea2b65e31edd9a19a6d100dfc0066ca2e92f72fd182\"}", "u": "28f3ec44eae678f9d0d8238c0b3a01a146d56ccc4c1125f0373d394c4e1e95f4", "v": 1}'); |
| 23 | + INSERT INTO encrypted (encrypted_int2) VALUES ('{"c": "8", "i": {"table": "encrypted", "column": "encrypted_int2"}, "k": "ct", "m": null, "o": "{\"\\\\\\\\\\\\\\\\x121212121212594ee28282d03415e7714fccd69eb7eb476c70743e485e20331f59cbc1c848dcdeda716f351eb20588c406a7df5fb8917ebf816739aa1414ac3b8498e493bf0badea5c9fdb3cc34da8b152b995957591880c523beb1d3f12487c38d18f62dd26209a727674e5a5fe3a3e3037860839afd801783caa0b75f5aa4c005b423d7518fd4ba6eb6aa561404f1a0220899d95fbd4b55f066864ff6954e127ddf460434025440ffa235e4349445f8ae71f35e45a7958d5f98c7f85724dd03c8c973247f0e43e65810b0672bb6d32a1c546fd4c2c724da38fc88e8d0d8f75bc3242b588da322b828832335847f195f7f387132c390d9bc5d056123dbba1fd978f33a60c0afa6a160ac387add829b16ca24b25c1cc84d7606331313b611894b0bcf02adae0d7a5d2a71990efd2b75021f57de01593e5247aa266279a8f585c67e69d1ceb8720e4f5960b58cc0ee79cb4b4ce89ade73e58df1d526c2a4e9ec7b54fdc47b4c0f9ccc46f058e5504f6561003935ebddcc2a8c9e1db37d34f2439ea83d05e35ee01bc89fb30d915ca9ef1853da28bb49bea7c\"}", "u": "9e80a31275db9e5ebc9a254864971cdef2ca68b0047712d3d106d86516bcfc6a", "v": 1}'); |
| 24 | + INSERT INTO encrypted (encrypted_int2) VALUES ('{"c": "9", "i": {"table": "encrypted", "column": "encrypted_int2"}, "k": "ct", "m": null, "o": "{\"\\\\\\\\\\\\\\\\x12121212121259dae28282d03415e7714fccd69eb7eb476c70743e485e20331f59cbc1c848dcdeda716f351eb20588c406a7df5fb8917ebf816739aa1414ac3b8498e493bf0badea5c9fdb3cc34da8b152b995957591880c523beb1d3f12487c38d18f62dd26209a727674e5a5fe3a3e3037860839afd801357205e56d3cf91febac317b171083359db17a7bb1b36322c0ba2d98761226235a94cde3ce299e791b0add7a9cb2e0930c6fc85e950ba8118098bbda70a1b64f6f315b9688ade446afbfe0e19fef48c755fb2a0a1cbe03f208c6a700ce4f2194dbad2d5a984af349c34ef03dd326643260f180efeb7bf2f50227646970924ea3e04126edf444e2c6c553a243844c3ab5c208294574a08d3590d8ef4d59da502e30ba176b42e37c113fec63b5dfb7bba36245f087bac09817ef32310b0ad9b940f10bb81da9c7c434c122c03accdfb569ad3bbe8b6b19d02adff465cf666c7b7097ef18079b554da8bd93a589691bce0ca56de08b24797c12dd6a124b2a0ee15ea54c9e52eb63db09f0d346297847be4eb98b9a96ca2ed672794e7e27022ec55a\"}", "u": "94ec6ec3b6a8acb4d1b94f0c3a4a7c6359b11ce5d8fd01a7e4474e5e7a0cca8b", "v": 1}'); |
46 | 25 |
|
| 26 | +-- 1 |
| 27 | + INSERT INTO encrypted (encrypted_int2) VALUES ('{"c": "1", "i": {"table": "encrypted", "column": "encrypted_int2"}, "k": "ct", "m": null, "o": "{\"\\\\\\\\\\\\\\\\x121212121212597ee28282d03415e7714fccd69eb7eb476c70743e485e20331f59cbc1c848dcdeda716f351eb20588c406a7df5fb8917ebf816739aa1414ac3b8498e493bf0badea5c9fdb3cc34da8b152b995957591880c523beb1d3f12487c38d18f62dd26209a727674e5a5fe3a3e3037860839afd801f6e268e7ba5a049613d57b000f03353acd2894710cbee75950e4c034ec695bc3c1c4662a272c20df45e7423b38bff2b864d1649483bd65fa40a0a2113d53fb3c756db4cc660266e550e5db1764d0a253b9bfb55a45fafa6add18e36f128d9843c66a2eae20aff8362f9d4cbd78fd7e39ed1b58550b12e7d863e7e2b2737dff77434d1850bf7c3bc2be212b3259c856f45efe6633355d4ecf68f0d97874cf6a7f22d78556c33e15c3903324526e2a36619d82184e7fe815f4bba53d85520c917beaa92dc2d9ae1268049c24ec1e4ab43fdb306a4f32c0b74fb5e943af91226277b11256bcada313abf55b1cde773b6858f199d1267467e664a940675394fab4d4ef729f02d0020275a94d7fb021cf7cd1e213df2136aea73353788be114c52eab\"}", "u": "fd80b0e733ed4ff9fe71434b9474ae434863eb01ceff77d73736ac6600334de3", "v": 1}'); |
47 | 28 |
|
48 |
| --- SELECT id FROM users WHERE cs_ore_64_8_v1(name_encrypted) > cs_ore_64_8_v1('{"o":"(\"{\"\"(\\\\\"\"\\\\\\\\\\\\\\\\x12121212121259bfe28282d03415e7714fccd69eb7eb476c70743e485e20331f59cbc1c848dcdeda716f351eb20588c406a7df5fb8917ebf816739aa1414ac3b8498e493bf0badea5c9fdb3cc34da8b152b995957591880c523beb1d3f12487c38d18f62dd26209a727674e5a5fe3a3e3037860839afd801ff4a28b714e4cde8df10625dce72602fdbdcc53d515857f1119f5912804ce09c6cf6c2d37393a27a465134523b512664582f834e15003b7216cb668480bc3e7d1c069f2572ece7c848b9eb9a28b4e62bfc2b97c93e61b2054154e621c5bbb7bed37de3d7c343bd3dbcf7b4af20128c961351bf55910a855f08a8587c2059a5f05ca8d7a082e695b3dd4ff3ce86694d4fe98972220eea1ab90f5de493ef3a502b74a569f103ee2897ebc9ae9b16a17e7be67415ee830519beb3058ffc1c1eb0e574d66c8b365919f27eb00aa7bce475d7bdaad4ed800f8fc3d626e0eb842e312b0cc22a1ccf89847ebb2cd0a6e18aec21bd2deeec1c47301fc687f7f764bb882b50f553c246a6da5816b78b3530119ea68b08a8403a90e063e58502670563bd4d\\\\\"\")\"\"}\")"}'); |
49 | 29 |
|
50 |
| -SELECT id, name_encrypted FROM users ORDER BY cs_ore_64_8_v1(name_encrypted) ASC; |
51 | 30 |
|
52 |
| -SELECT id, name_encrypted FROM users ORDER BY name_encrypted; |
| 31 | +-- SELECT id, name_encrypted FROM users ORDER BY cs_ore_64_8_v1(name_encrypted) ASC; |
53 | 32 |
|
54 |
| --- SELECT id FROM users WHERE name_encrypted::cs_encrypted_v1 > '{ |
55 |
| --- "v": 1, |
56 |
| --- "k": "ct", |
57 |
| --- "c": "ciphertext", |
58 |
| --- "i": { |
59 |
| --- "t": "users", |
60 |
| --- "c": "name" |
61 |
| --- }, |
62 |
| --- "m": [1, 2, 3], |
63 |
| --- "o":"(\"{\"\"(\\\\\"\"\\\\\\\\\\\\\\\\x12121212121259bfe28282d03415e7714fccd69eb7eb476c70743e485e20331f59cbc1c848dcdeda716f351eb20588c406a7df5fb8917ebf816739aa1414ac3b8498e493bf0badea5c9fdb3cc34da8b152b995957591880c523beb1d3f12487c38d18f62dd26209a727674e5a5fe3a3e3037860839afd801ff4a28b714e4cde8df10625dce72602fdbdcc53d515857f1119f5912804ce09c6cf6c2d37393a27a465134523b512664582f834e15003b7216cb668480bc3e7d1c069f2572ece7c848b9eb9a28b4e62bfc2b97c93e61b2054154e621c5bbb7bed37de3d7c343bd3dbcf7b4af20128c961351bf55910a855f08a8587c2059a5f05ca8d7a082e695b3dd4ff3ce86694d4fe98972220eea1ab90f5de493ef3a502b74a569f103ee2897ebc9ae9b16a17e7be67415ee830519beb3058ffc1c1eb0e574d66c8b365919f27eb00aa7bce475d7bdaad4ed800f8fc3d626e0eb842e312b0cc22a1ccf89847ebb2cd0a6e18aec21bd2deeec1c47301fc687f7f764bb882b50f553c246a6da5816b78b3530119ea68b08a8403a90e063e58502670563bd4d\\\\\"\")\"\"}\")" |
64 |
| --- }'::cs_encrypted_v1; |
| 33 | +-- SELECT id, cs_ore_64_8_v1(name_encrypted) FROM users; |
65 | 34 |
|
66 |
| --- SELECT * FROM users ORDER BY cs_ore_64_8_v1(name_encrypted) ASC; |
67 |
| --- SELECT * FROM users ORDER BY name_encrypted USING <; |
68 |
| --- EXPLAIN ANALYZE SELECT * FROM users ORDER BY name_encrypted ASC; |
| 35 | +-- SANITY CHECK DATA |
| 36 | +-- SELECT (encrypted_int2->>'o')::bytea[] FROM encrypted; |
69 | 37 |
|
70 |
| --- SELECT data_type FROM information_schema.columns WHERE table_name = 'users' AND column_name = 'name_encrypted'; |
71 |
| --- EXPLAIN ANALYZE SELECT * FROM users ORDER BY name_encrypted::jsonb ASC; |
| 38 | +SELECT id, encrypted_int2->>'c' FROM encrypted ORDER BY encrypted_int2 ASC; |
72 | 39 |
|
| 40 | +SELECT id, encrypted_int2->>'c' FROM encrypted ORDER BY encrypted_int2 DESC; |
73 | 41 |
|
74 | 42 |
|
75 | 43 |
|
|
0 commit comments