Skip to content

Commit b93f7c2

Browse files
authored
PHPC-2197: Support queryable encryption range indexes (#1409)
* Implement ClientEncryption::encryptExpression() Define algorithm and query type constants for range preview * Handle BSON encoding exceptions in encrypt/decrypt Note that it is not possible to write a test for decrypt() since Binary instances always encode to BSON.
1 parent 69671db commit b93f7c2

8 files changed

+404
-7
lines changed

src/MongoDB/ClientEncryption.c

Lines changed: 156 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ zend_class_entry* php_phongo_clientencryption_ce;
3838
/* Forward declarations */
3939
static void phongo_clientencryption_create_datakey(php_phongo_clientencryption_t* clientencryption, zval* return_value, char* kms_provider, zval* options);
4040
static void phongo_clientencryption_encrypt(php_phongo_clientencryption_t* clientencryption, zval* zvalue, zval* zciphertext, zval* options);
41+
static void phongo_clientencryption_encrypt_expression(php_phongo_clientencryption_t* clientencryption, zval* zexpr, zval* return_value, zval* options);
4142
static void phongo_clientencryption_decrypt(php_phongo_clientencryption_t* clientencryption, zval* zciphertext, zval* zvalue);
4243

4344
#define RETVAL_BSON_T(reply) \
@@ -216,6 +217,24 @@ static PHP_METHOD(MongoDB_Driver_ClientEncryption, encrypt)
216217
phongo_clientencryption_encrypt(intern, value, return_value, options);
217218
}
218219

220+
/* Encrypts a value with a given key and algorithm */
221+
static PHP_METHOD(MongoDB_Driver_ClientEncryption, encryptExpression)
222+
{
223+
zval* expr = NULL;
224+
zval* options = NULL;
225+
php_phongo_clientencryption_t* intern;
226+
227+
intern = Z_CLIENTENCRYPTION_OBJ_P(getThis());
228+
229+
PHONGO_PARSE_PARAMETERS_START(1, 2)
230+
Z_PARAM_ZVAL(expr)
231+
Z_PARAM_OPTIONAL
232+
Z_PARAM_ARRAY_OR_NULL(options)
233+
PHONGO_PARSE_PARAMETERS_END();
234+
235+
phongo_clientencryption_encrypt_expression(intern, expr, return_value, options);
236+
}
237+
219238
/* Decrypts an encrypted value (BSON binary of subtype 6). Returns the original BSON value */
220239
static PHP_METHOD(MongoDB_Driver_ClientEncryption, decrypt)
221240
{
@@ -823,6 +842,76 @@ static void phongo_clientencryption_create_datakey(php_phongo_clientencryption_t
823842
bson_value_destroy(&keyid);
824843
}
825844

845+
static mongoc_client_encryption_encrypt_range_opts_t* phongo_clientencryption_encrypt_range_opts_from_zval(zval* options)
846+
{
847+
mongoc_client_encryption_encrypt_range_opts_t* opts;
848+
849+
opts = mongoc_client_encryption_encrypt_range_opts_new();
850+
851+
if (!options || Z_TYPE_P(options) != IS_ARRAY) {
852+
return opts;
853+
}
854+
855+
if (php_array_existsc(options, "sparsity")) {
856+
int64_t sparsity = php_array_fetchc_long(options, "sparsity");
857+
858+
if (sparsity < 0 || sparsity > INT64_MAX) {
859+
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "Expected \"sparsity\" range option to be a positive 64-bit integer, %" PRId64 " given", sparsity);
860+
goto cleanup;
861+
}
862+
863+
mongoc_client_encryption_encrypt_range_opts_set_sparsity(opts, sparsity);
864+
}
865+
866+
if (php_array_existsc(options, "precision")) {
867+
int64_t precision = php_array_fetchc_long(options, "precision");
868+
869+
if (precision < 0 || precision > INT32_MAX) {
870+
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "Expected \"precision\" range option to be a positive 32-bit integer, %" PRId64 " given", precision);
871+
goto cleanup;
872+
}
873+
874+
mongoc_client_encryption_encrypt_range_opts_set_precision(opts, (int32_t) precision);
875+
}
876+
877+
if (php_array_existsc(options, "min")) {
878+
bson_value_t min = { 0 };
879+
880+
php_phongo_zval_to_bson_value(php_array_fetchc(options, "min"), PHONGO_BSON_NONE, &min);
881+
882+
if (EG(exception)) {
883+
bson_value_destroy(&min);
884+
goto cleanup;
885+
}
886+
887+
mongoc_client_encryption_encrypt_range_opts_set_min(opts, &min);
888+
bson_value_destroy(&min);
889+
}
890+
891+
if (php_array_existsc(options, "max")) {
892+
bson_value_t max = { 0 };
893+
894+
php_phongo_zval_to_bson_value(php_array_fetchc(options, "max"), PHONGO_BSON_NONE, &max);
895+
896+
if (EG(exception)) {
897+
bson_value_destroy(&max);
898+
goto cleanup;
899+
}
900+
901+
mongoc_client_encryption_encrypt_range_opts_set_max(opts, &max);
902+
bson_value_destroy(&max);
903+
}
904+
905+
return opts;
906+
907+
cleanup:
908+
if (opts) {
909+
mongoc_client_encryption_encrypt_range_opts_destroy(opts);
910+
}
911+
912+
return NULL;
913+
}
914+
826915
static mongoc_client_encryption_encrypt_opts_t* phongo_clientencryption_encrypt_opts_from_zval(zval* options)
827916
{
828917
mongoc_client_encryption_encrypt_opts_t* opts;
@@ -890,6 +979,20 @@ static mongoc_client_encryption_encrypt_opts_t* phongo_clientencryption_encrypt_
890979
}
891980
}
892981

982+
if (php_array_existsc(options, "rangeOpts")) {
983+
mongoc_client_encryption_encrypt_range_opts_t* range_opts;
984+
985+
range_opts = phongo_clientencryption_encrypt_range_opts_from_zval(php_array_fetchc(options, "rangeOpts"));
986+
987+
if (!range_opts) {
988+
/* Exception already thrown */
989+
goto cleanup;
990+
}
991+
992+
mongoc_client_encryption_encrypt_opts_set_range_opts(opts, range_opts);
993+
mongoc_client_encryption_encrypt_range_opts_destroy(range_opts);
994+
}
995+
893996
return opts;
894997

895998
cleanup:
@@ -902,13 +1005,17 @@ static mongoc_client_encryption_encrypt_opts_t* phongo_clientencryption_encrypt_
9021005

9031006
static void phongo_clientencryption_encrypt(php_phongo_clientencryption_t* clientencryption, zval* zvalue, zval* zciphertext, zval* options)
9041007
{
905-
mongoc_client_encryption_encrypt_opts_t* opts;
1008+
mongoc_client_encryption_encrypt_opts_t* opts = NULL;
9061009
bson_value_t ciphertext = { 0 };
9071010
bson_value_t value = { 0 };
9081011
bson_error_t error = { 0 };
9091012

9101013
php_phongo_zval_to_bson_value(zvalue, PHONGO_BSON_NONE, &value);
9111014

1015+
if (EG(exception)) {
1016+
goto cleanup;
1017+
}
1018+
9121019
opts = phongo_clientencryption_encrypt_opts_from_zval(options);
9131020

9141021
if (!opts) {
@@ -935,6 +1042,45 @@ static void phongo_clientencryption_encrypt(php_phongo_clientencryption_t* clien
9351042
bson_value_destroy(&value);
9361043
}
9371044

1045+
static void phongo_clientencryption_encrypt_expression(php_phongo_clientencryption_t* clientencryption, zval* zexpr, zval* return_value, zval* options)
1046+
{
1047+
mongoc_client_encryption_encrypt_opts_t* opts = NULL;
1048+
bson_t expr = BSON_INITIALIZER;
1049+
bson_t expr_encrypted = BSON_INITIALIZER;
1050+
bson_error_t error = { 0 };
1051+
1052+
php_phongo_zval_to_bson(zexpr, PHONGO_BSON_NONE, &expr, NULL);
1053+
1054+
if (EG(exception)) {
1055+
goto cleanup;
1056+
}
1057+
1058+
opts = phongo_clientencryption_encrypt_opts_from_zval(options);
1059+
1060+
if (!opts) {
1061+
/* Exception already thrown */
1062+
goto cleanup;
1063+
}
1064+
1065+
if (!mongoc_client_encryption_encrypt_expression(clientencryption->client_encryption, &expr, opts, &expr_encrypted, &error)) {
1066+
phongo_throw_exception_from_bson_error_t(&error);
1067+
goto cleanup;
1068+
}
1069+
1070+
if (!php_phongo_bson_to_zval(&expr_encrypted, return_value)) {
1071+
/* Exception already thrown */
1072+
goto cleanup;
1073+
}
1074+
1075+
cleanup:
1076+
if (opts) {
1077+
mongoc_client_encryption_encrypt_opts_destroy(opts);
1078+
}
1079+
1080+
bson_destroy(&expr);
1081+
bson_destroy(&expr_encrypted);
1082+
}
1083+
9381084
static void phongo_clientencryption_decrypt(php_phongo_clientencryption_t* clientencryption, zval* zciphertext, zval* zvalue)
9391085
{
9401086
bson_value_t ciphertext = { 0 };
@@ -943,6 +1089,10 @@ static void phongo_clientencryption_decrypt(php_phongo_clientencryption_t* clien
9431089

9441090
php_phongo_zval_to_bson_value(zciphertext, PHONGO_BSON_NONE, &ciphertext);
9451091

1092+
if (EG(exception)) {
1093+
goto cleanup;
1094+
}
1095+
9461096
if (!mongoc_client_encryption_decrypt(clientencryption->client_encryption, &ciphertext, &value, &error)) {
9471097
phongo_throw_exception_from_bson_error_t(&error);
9481098
goto cleanup;
@@ -973,6 +1123,11 @@ static void phongo_clientencryption_encrypt(php_phongo_clientencryption_t* clien
9731123
phongo_throw_exception_no_cse(PHONGO_ERROR_RUNTIME, "Cannot encrypt value.");
9741124
}
9751125

1126+
static void phongo_clientencryption_encrypt_expression(php_phongo_clientencryption_t* clientencryption, zval* zexpr, zval* return_value, zval* options)
1127+
{
1128+
phongo_throw_exception_no_cse(PHONGO_ERROR_RUNTIME, "Cannot encrypt expression.");
1129+
}
1130+
9761131
static void phongo_clientencryption_decrypt(php_phongo_clientencryption_t* clientencryption, zval* zciphertext, zval* zvalue)
9771132
{
9781133
phongo_throw_exception_no_cse(PHONGO_ERROR_RUNTIME, "Cannot decrypt value.");

src/MongoDB/ClientEncryption.stub.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,24 @@ final class ClientEncryption
3333
*/
3434
public const ALGORITHM_UNINDEXED = UNKNOWN;
3535

36+
/**
37+
* @var string
38+
* @cvalue MONGOC_ENCRYPT_ALGORITHM_RANGEPREVIEW
39+
*/
40+
public const ALGORITHM_RANGE_PREVIEW = UNKNOWN;
41+
3642
/**
3743
* @var string
3844
* @cvalue MONGOC_ENCRYPT_QUERY_TYPE_EQUALITY
3945
*/
4046
public const QUERY_TYPE_EQUALITY = UNKNOWN;
4147

48+
/**
49+
* @var string
50+
* @cvalue MONGOC_ENCRYPT_QUERY_TYPE_RANGEPREVIEW
51+
*/
52+
public const QUERY_TYPE_RANGE_PREVIEW = UNKNOWN;
53+
4254
final public function __construct(array $options) {}
4355

4456
final public function addKeyAltName(\MongoDB\BSON\Binary $keyId, string $keyAltName): ?object {}
@@ -61,6 +73,13 @@ final public function encrypt(mixed $value, ?array $options = null): \MongoDB\BS
6173
final public function encrypt($value, ?array $options = null): \MongoDB\BSON\Binary {}
6274
#endif
6375

76+
#if PHP_VERSION_ID >= 80000
77+
final public function encryptExpression(array|object $expr, ?array $options = null): object {}
78+
#else
79+
/** @param array|object $expr */
80+
final public function encryptExpression($expr, ?array $options = null): object {}
81+
#endif
82+
6483
final public function getKey(\MongoDB\BSON\Binary $keyId): ?object {}
6584

6685
final public function getKeyByAltName(string $keyAltName): ?object {}

src/MongoDB/ClientEncryption_arginfo.h

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: 706125ea8c95ec1b3720909c8351585e03aa4836 */
2+
* Stub hash: cb36443aeb49b72044a915964006559b4beba4ab */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_MongoDB_Driver_ClientEncryption___construct, 0, 0, 1)
55
ZEND_ARG_TYPE_INFO(0, options, IS_ARRAY, 0)
@@ -45,6 +45,20 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_MongoDB_Driver_ClientEncryp
4545
ZEND_END_ARG_INFO()
4646
#endif
4747

48+
#if PHP_VERSION_ID >= 80000
49+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_MongoDB_Driver_ClientEncryption_encryptExpression, 0, 1, IS_OBJECT, 0)
50+
ZEND_ARG_TYPE_MASK(0, expr, MAY_BE_ARRAY|MAY_BE_OBJECT, NULL)
51+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 1, "null")
52+
ZEND_END_ARG_INFO()
53+
#endif
54+
55+
#if !(PHP_VERSION_ID >= 80000)
56+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_MongoDB_Driver_ClientEncryption_encryptExpression, 0, 1, IS_OBJECT, 0)
57+
ZEND_ARG_INFO(0, expr)
58+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 1, "null")
59+
ZEND_END_ARG_INFO()
60+
#endif
61+
4862
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_MongoDB_Driver_ClientEncryption_getKey, 0, 1, IS_OBJECT, 1)
4963
ZEND_ARG_OBJ_INFO(0, keyId, MongoDB\\BSON\\Binary, 0)
5064
ZEND_END_ARG_INFO()
@@ -92,6 +106,12 @@ static ZEND_METHOD(MongoDB_Driver_ClientEncryption, encrypt);
92106
#if !(PHP_VERSION_ID >= 80000)
93107
static ZEND_METHOD(MongoDB_Driver_ClientEncryption, encrypt);
94108
#endif
109+
#if PHP_VERSION_ID >= 80000
110+
static ZEND_METHOD(MongoDB_Driver_ClientEncryption, encryptExpression);
111+
#endif
112+
#if !(PHP_VERSION_ID >= 80000)
113+
static ZEND_METHOD(MongoDB_Driver_ClientEncryption, encryptExpression);
114+
#endif
95115
static ZEND_METHOD(MongoDB_Driver_ClientEncryption, getKey);
96116
static ZEND_METHOD(MongoDB_Driver_ClientEncryption, getKeyByAltName);
97117
static ZEND_METHOD(MongoDB_Driver_ClientEncryption, getKeys);
@@ -121,6 +141,12 @@ static const zend_function_entry class_MongoDB_Driver_ClientEncryption_methods[]
121141
#endif
122142
#if !(PHP_VERSION_ID >= 80000)
123143
ZEND_ME(MongoDB_Driver_ClientEncryption, encrypt, arginfo_class_MongoDB_Driver_ClientEncryption_encrypt, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
144+
#endif
145+
#if PHP_VERSION_ID >= 80000
146+
ZEND_ME(MongoDB_Driver_ClientEncryption, encryptExpression, arginfo_class_MongoDB_Driver_ClientEncryption_encryptExpression, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
147+
#endif
148+
#if !(PHP_VERSION_ID >= 80000)
149+
ZEND_ME(MongoDB_Driver_ClientEncryption, encryptExpression, arginfo_class_MongoDB_Driver_ClientEncryption_encryptExpression, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
124150
#endif
125151
ZEND_ME(MongoDB_Driver_ClientEncryption, getKey, arginfo_class_MongoDB_Driver_ClientEncryption_getKey, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
126152
ZEND_ME(MongoDB_Driver_ClientEncryption, getKeyByAltName, arginfo_class_MongoDB_Driver_ClientEncryption_getKeyByAltName, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
@@ -145,39 +171,53 @@ static zend_class_entry *register_class_MongoDB_Driver_ClientEncryption(void)
145171
class_entry->ce_flags |= ZEND_ACC_FINAL;
146172

147173
zval const_AEAD_AES_256_CBC_HMAC_SHA_512_DETERMINISTIC_value;
148-
zend_string *const_AEAD_AES_256_CBC_HMAC_SHA_512_DETERMINISTIC_value_str = zend_string_init(MONGOC_AEAD_AES_256_CBC_HMAC_SHA_512_DETERMINISTIC, sizeof(MONGOC_AEAD_AES_256_CBC_HMAC_SHA_512_DETERMINISTIC) - 1, 1);
174+
zend_string *const_AEAD_AES_256_CBC_HMAC_SHA_512_DETERMINISTIC_value_str = zend_string_init(MONGOC_AEAD_AES_256_CBC_HMAC_SHA_512_DETERMINISTIC, strlen(MONGOC_AEAD_AES_256_CBC_HMAC_SHA_512_DETERMINISTIC), 1);
149175
ZVAL_STR(&const_AEAD_AES_256_CBC_HMAC_SHA_512_DETERMINISTIC_value, const_AEAD_AES_256_CBC_HMAC_SHA_512_DETERMINISTIC_value_str);
150176
zend_string *const_AEAD_AES_256_CBC_HMAC_SHA_512_DETERMINISTIC_name = zend_string_init_interned("AEAD_AES_256_CBC_HMAC_SHA_512_DETERMINISTIC", sizeof("AEAD_AES_256_CBC_HMAC_SHA_512_DETERMINISTIC") - 1, 1);
151177
zend_declare_class_constant_ex(class_entry, const_AEAD_AES_256_CBC_HMAC_SHA_512_DETERMINISTIC_name, &const_AEAD_AES_256_CBC_HMAC_SHA_512_DETERMINISTIC_value, ZEND_ACC_PUBLIC, NULL);
152178
zend_string_release(const_AEAD_AES_256_CBC_HMAC_SHA_512_DETERMINISTIC_name);
153179

154180
zval const_AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM_value;
155-
zend_string *const_AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM_value_str = zend_string_init(MONGOC_AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM, sizeof(MONGOC_AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM) - 1, 1);
181+
zend_string *const_AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM_value_str = zend_string_init(MONGOC_AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM, strlen(MONGOC_AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM), 1);
156182
ZVAL_STR(&const_AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM_value, const_AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM_value_str);
157183
zend_string *const_AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM_name = zend_string_init_interned("AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM", sizeof("AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM") - 1, 1);
158184
zend_declare_class_constant_ex(class_entry, const_AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM_name, &const_AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM_value, ZEND_ACC_PUBLIC, NULL);
159185
zend_string_release(const_AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM_name);
160186

161187
zval const_ALGORITHM_INDEXED_value;
162-
zend_string *const_ALGORITHM_INDEXED_value_str = zend_string_init(MONGOC_ENCRYPT_ALGORITHM_INDEXED, sizeof(MONGOC_ENCRYPT_ALGORITHM_INDEXED) - 1, 1);
188+
zend_string *const_ALGORITHM_INDEXED_value_str = zend_string_init(MONGOC_ENCRYPT_ALGORITHM_INDEXED, strlen(MONGOC_ENCRYPT_ALGORITHM_INDEXED), 1);
163189
ZVAL_STR(&const_ALGORITHM_INDEXED_value, const_ALGORITHM_INDEXED_value_str);
164190
zend_string *const_ALGORITHM_INDEXED_name = zend_string_init_interned("ALGORITHM_INDEXED", sizeof("ALGORITHM_INDEXED") - 1, 1);
165191
zend_declare_class_constant_ex(class_entry, const_ALGORITHM_INDEXED_name, &const_ALGORITHM_INDEXED_value, ZEND_ACC_PUBLIC, NULL);
166192
zend_string_release(const_ALGORITHM_INDEXED_name);
167193

168194
zval const_ALGORITHM_UNINDEXED_value;
169-
zend_string *const_ALGORITHM_UNINDEXED_value_str = zend_string_init(MONGOC_ENCRYPT_ALGORITHM_UNINDEXED, sizeof(MONGOC_ENCRYPT_ALGORITHM_UNINDEXED) - 1, 1);
195+
zend_string *const_ALGORITHM_UNINDEXED_value_str = zend_string_init(MONGOC_ENCRYPT_ALGORITHM_UNINDEXED, strlen(MONGOC_ENCRYPT_ALGORITHM_UNINDEXED), 1);
170196
ZVAL_STR(&const_ALGORITHM_UNINDEXED_value, const_ALGORITHM_UNINDEXED_value_str);
171197
zend_string *const_ALGORITHM_UNINDEXED_name = zend_string_init_interned("ALGORITHM_UNINDEXED", sizeof("ALGORITHM_UNINDEXED") - 1, 1);
172198
zend_declare_class_constant_ex(class_entry, const_ALGORITHM_UNINDEXED_name, &const_ALGORITHM_UNINDEXED_value, ZEND_ACC_PUBLIC, NULL);
173199
zend_string_release(const_ALGORITHM_UNINDEXED_name);
174200

201+
zval const_ALGORITHM_RANGE_PREVIEW_value;
202+
zend_string *const_ALGORITHM_RANGE_PREVIEW_value_str = zend_string_init(MONGOC_ENCRYPT_ALGORITHM_RANGEPREVIEW, strlen(MONGOC_ENCRYPT_ALGORITHM_RANGEPREVIEW), 1);
203+
ZVAL_STR(&const_ALGORITHM_RANGE_PREVIEW_value, const_ALGORITHM_RANGE_PREVIEW_value_str);
204+
zend_string *const_ALGORITHM_RANGE_PREVIEW_name = zend_string_init_interned("ALGORITHM_RANGE_PREVIEW", sizeof("ALGORITHM_RANGE_PREVIEW") - 1, 1);
205+
zend_declare_class_constant_ex(class_entry, const_ALGORITHM_RANGE_PREVIEW_name, &const_ALGORITHM_RANGE_PREVIEW_value, ZEND_ACC_PUBLIC, NULL);
206+
zend_string_release(const_ALGORITHM_RANGE_PREVIEW_name);
207+
175208
zval const_QUERY_TYPE_EQUALITY_value;
176-
zend_string *const_QUERY_TYPE_EQUALITY_value_str = zend_string_init(MONGOC_ENCRYPT_QUERY_TYPE_EQUALITY, sizeof(MONGOC_ENCRYPT_QUERY_TYPE_EQUALITY) - 1, 1);
209+
zend_string *const_QUERY_TYPE_EQUALITY_value_str = zend_string_init(MONGOC_ENCRYPT_QUERY_TYPE_EQUALITY, strlen(MONGOC_ENCRYPT_QUERY_TYPE_EQUALITY), 1);
177210
ZVAL_STR(&const_QUERY_TYPE_EQUALITY_value, const_QUERY_TYPE_EQUALITY_value_str);
178211
zend_string *const_QUERY_TYPE_EQUALITY_name = zend_string_init_interned("QUERY_TYPE_EQUALITY", sizeof("QUERY_TYPE_EQUALITY") - 1, 1);
179212
zend_declare_class_constant_ex(class_entry, const_QUERY_TYPE_EQUALITY_name, &const_QUERY_TYPE_EQUALITY_value, ZEND_ACC_PUBLIC, NULL);
180213
zend_string_release(const_QUERY_TYPE_EQUALITY_name);
181214

215+
zval const_QUERY_TYPE_RANGE_PREVIEW_value;
216+
zend_string *const_QUERY_TYPE_RANGE_PREVIEW_value_str = zend_string_init(MONGOC_ENCRYPT_QUERY_TYPE_RANGEPREVIEW, strlen(MONGOC_ENCRYPT_QUERY_TYPE_RANGEPREVIEW), 1);
217+
ZVAL_STR(&const_QUERY_TYPE_RANGE_PREVIEW_value, const_QUERY_TYPE_RANGE_PREVIEW_value_str);
218+
zend_string *const_QUERY_TYPE_RANGE_PREVIEW_name = zend_string_init_interned("QUERY_TYPE_RANGE_PREVIEW", sizeof("QUERY_TYPE_RANGE_PREVIEW") - 1, 1);
219+
zend_declare_class_constant_ex(class_entry, const_QUERY_TYPE_RANGE_PREVIEW_name, &const_QUERY_TYPE_RANGE_PREVIEW_value, ZEND_ACC_PUBLIC, NULL);
220+
zend_string_release(const_QUERY_TYPE_RANGE_PREVIEW_name);
221+
182222
return class_entry;
183223
}

tests/clientEncryption/clientEncryption-constants.phpt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ var_dump(MongoDB\Driver\ClientEncryption::AEAD_AES_256_CBC_HMAC_SHA_512_DETERMIN
77
var_dump(MongoDB\Driver\ClientEncryption::AEAD_AES_256_CBC_HMAC_SHA_512_RANDOM);
88
var_dump(MongoDB\Driver\ClientEncryption::ALGORITHM_INDEXED);
99
var_dump(MongoDB\Driver\ClientEncryption::ALGORITHM_UNINDEXED);
10+
var_dump(MongoDB\Driver\ClientEncryption::ALGORITHM_RANGE_PREVIEW);
1011
var_dump(MongoDB\Driver\ClientEncryption::QUERY_TYPE_EQUALITY);
12+
var_dump(MongoDB\Driver\ClientEncryption::QUERY_TYPE_RANGE_PREVIEW);
1113

1214
?>
1315
===DONE===
@@ -17,5 +19,7 @@ string(43) "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
1719
string(36) "AEAD_AES_256_CBC_HMAC_SHA_512-Random"
1820
string(7) "Indexed"
1921
string(9) "Unindexed"
22+
string(12) "RangePreview"
2023
string(8) "equality"
24+
string(12) "rangePreview"
2125
===DONE===

0 commit comments

Comments
 (0)