Skip to content

Commit cdaa7db

Browse files
authored
PCBC-939 Support query with read from replica (#118)
* Support query with read from replica * formatting * update package.xml
1 parent 3059c9e commit cdaa7db

File tree

4 files changed

+38
-2
lines changed

4 files changed

+38
-2
lines changed

Couchbase/QueryOptions.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class QueryOptions
4444
private ?bool $metrics = null;
4545
private ?bool $preserveExpiry = null;
4646
private ?string $queryContext = null;
47+
private ?bool $useReplica = null;
4748
private Transcoder $transcoder;
4849

4950
/**
@@ -369,6 +370,20 @@ public function preserveExpiry(bool $preserve): QueryOptions
369370
return $this;
370371
}
371372

373+
/**
374+
* Sets whether the query engine should use replica nodes for KV fetches if the active node is down.
375+
*
376+
* @param bool $useReplica Whether to use replica nodes for KV fetches
377+
*
378+
* @return QueryOptions
379+
* @since 4.1.5
380+
*/
381+
public function useReplica(bool $useReplica): QueryOptions
382+
{
383+
$this->useReplica = $useReplica;
384+
return $this;
385+
}
386+
372387
/**
373388
* Associate custom transcoder with the request.
374389
*
@@ -451,6 +466,7 @@ public static function export(?QueryOptions $options, string $scopeName = null,
451466
'clientContextId' => $options->clientContextId,
452467
'metrics' => $options->metrics,
453468
'preserveExpiry' => $options->preserveExpiry,
469+
'useReplica' => $options->useReplica,
454470
'queryContext' => $options->queryContext == null ? $defaultQueryContext : $options->queryContext,
455471
];
456472
}

package.xml

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -452,10 +452,10 @@
452452
<file role="src" name="bootstrap_state_listener.hxx"/>
453453
<file role="src" name="build_deferred_query_indexes.cxx"/>
454454
<file role="src" name="cluster.cxx"/>
455-
<file role="src" name="collection_query_index_manager.cxx"/>
456455
<file role="src" name="common_error_category.cxx"/>
457456
<file role="src" name="configuration_profiles_registry.cxx"/>
458457
<file role="src" name="conjunction_query.cxx"/>
458+
<file role="src" name="create_bucket.cxx"/>
459459
<file role="src" name="create_query_index.cxx"/>
460460
<file role="src" name="date_range.cxx"/>
461461
<file role="src" name="date_range_facet.cxx"/>
@@ -465,6 +465,7 @@
465465
<file role="src" name="disjunction_query.cxx"/>
466466
<file role="src" name="dns_srv_tracker.cxx"/>
467467
<file role="src" name="dns_srv_tracker.hxx"/>
468+
<file role="src" name="drop_bucket.cxx"/>
468469
<file role="src" name="drop_query_index.cxx"/>
469470
<file role="src" name="encoded_search_facet.hxx"/>
470471
<file role="src" name="encoded_search_query.hxx"/>
@@ -473,23 +474,28 @@
473474
<file role="src" name="expiry.cxx"/>
474475
<file role="src" name="fail_fast_retry_strategy.cxx"/>
475476
<file role="src" name="field_level_encryption_error_category.cxx"/>
477+
<file role="src" name="flush_bucket.cxx"/>
476478
<file role="src" name="geo_bounding_box_query.cxx"/>
477479
<file role="src" name="geo_distance_query.cxx"/>
478480
<file role="src" name="geo_polygon_query.cxx"/>
479481
<file role="src" name="get.cxx"/>
482+
<file role="src" name="get_all_buckets.cxx"/>
480483
<file role="src" name="get_all_query_indexes.cxx"/>
481484
<file role="src" name="get_all_replicas.cxx"/>
482485
<file role="src" name="get_all_replicas.hxx"/>
483486
<file role="src" name="get_and_lock.cxx"/>
484487
<file role="src" name="get_and_touch.cxx"/>
485488
<file role="src" name="get_any_replica.cxx"/>
486489
<file role="src" name="get_any_replica.hxx"/>
490+
<file role="src" name="get_bucket.cxx"/>
487491
<file role="src" name="get_replica.cxx"/>
488492
<file role="src" name="get_replica.hxx"/>
489493
<file role="src" name="increment.cxx"/>
490494
<file role="src" name="insert.cxx"/>
491495
<file role="src" name="internal_date_range_facet_result.cxx"/>
492496
<file role="src" name="internal_date_range_facet_result.hxx"/>
497+
<file role="src" name="internal_manager_error_context.cxx"/>
498+
<file role="src" name="internal_manager_error_context.hxx"/>
493499
<file role="src" name="internal_numeric_range_facet_result.cxx"/>
494500
<file role="src" name="internal_numeric_range_facet_result.hxx"/>
495501
<file role="src" name="internal_search_error_context.cxx"/>
@@ -509,6 +515,7 @@
509515
<file role="src" name="key_value_error_context.cxx"/>
510516
<file role="src" name="lookup_in.cxx"/>
511517
<file role="src" name="management_error_category.cxx"/>
518+
<file role="src" name="manager_error_context.cxx"/>
512519
<file role="src" name="match_all_query.cxx"/>
513520
<file role="src" name="match_none_query.cxx"/>
514521
<file role="src" name="match_phrase_query.cxx"/>
@@ -556,6 +563,7 @@
556563
<file role="src" name="transaction_get_result.cxx"/>
557564
<file role="src" name="transaction_op_error_category.cxx"/>
558565
<file role="src" name="unlock.cxx"/>
566+
<file role="src" name="update_bucket.cxx"/>
559567
<file role="src" name="upsert.cxx"/>
560568
<file role="src" name="view_error_category.cxx"/>
561569
<file role="src" name="watch_query_indexes.cxx"/>
@@ -1169,6 +1177,7 @@
11691177
<file role="src" name="n1ql_query_options.hxx"/>
11701178
<file role="src" name="operation_map.hxx"/>
11711179
<file role="src" name="operations.hxx"/>
1180+
<file role="src" name="origin.cxx"/>
11721181
<file role="src" name="origin.hxx"/>
11731182
<file role="src" name="pending_operation.hxx"/>
11741183
<file role="src" name="ping_collector.hxx"/>
@@ -1236,6 +1245,7 @@
12361245
<file role="src" name="tls_verify_mode.hxx"/>
12371246
</dir>
12381247
<dir name="management">
1248+
<file role="src" name="bucket_settings.hxx"/>
12391249
<file role="src" name="query_index.hxx"/>
12401250
</dir>
12411251
<dir name="metrics">
@@ -1295,6 +1305,7 @@
12951305
<file role="src" name="boolean_field_query.hxx"/>
12961306
<file role="src" name="boolean_query.hxx"/>
12971307
<file role="src" name="bucket.hxx"/>
1308+
<file role="src" name="bucket_manager.hxx"/>
12981309
<file role="src" name="build_query_index_options.hxx"/>
12991310
<file role="src" name="cas.hxx"/>
13001311
<file role="src" name="certificate_authenticator.hxx"/>
@@ -1309,6 +1320,7 @@
13091320
<file role="src" name="configuration_profiles_registry.hxx"/>
13101321
<file role="src" name="conjunction_query.hxx"/>
13111322
<file role="src" name="counter_result.hxx"/>
1323+
<file role="src" name="create_bucket_options.hxx"/>
13121324
<file role="src" name="create_primary_query_index_options.hxx"/>
13131325
<file role="src" name="create_query_index_options.hxx"/>
13141326
<file role="src" name="date_range.hxx"/>
@@ -1319,6 +1331,7 @@
13191331
<file role="src" name="disjunction_query.hxx"/>
13201332
<file role="src" name="dns_options.hxx"/>
13211333
<file role="src" name="doc_id_query.hxx"/>
1334+
<file role="src" name="drop_bucket_options.hxx"/>
13221335
<file role="src" name="drop_primary_query_index_options.hxx"/>
13231336
<file role="src" name="drop_query_index_options.hxx"/>
13241337
<file role="src" name="durability_level.hxx"/>
@@ -1328,15 +1341,18 @@
13281341
<file role="src" name="exists_result.hxx"/>
13291342
<file role="src" name="expiry.hxx"/>
13301343
<file role="src" name="fail_fast_retry_strategy.hxx"/>
1344+
<file role="src" name="flush_bucket_options.hxx"/>
13311345
<file role="src" name="geo_bounding_box_query.hxx"/>
13321346
<file role="src" name="geo_distance_query.hxx"/>
13331347
<file role="src" name="geo_point.hxx"/>
13341348
<file role="src" name="geo_polygon_query.hxx"/>
1349+
<file role="src" name="get_all_buckets_options.hxx"/>
13351350
<file role="src" name="get_all_query_indexes_options.hxx"/>
13361351
<file role="src" name="get_all_replicas_options.hxx"/>
13371352
<file role="src" name="get_and_lock_options.hxx"/>
13381353
<file role="src" name="get_and_touch_options.hxx"/>
13391354
<file role="src" name="get_any_replica_options.hxx"/>
1355+
<file role="src" name="get_bucket_options.hxx"/>
13401356
<file role="src" name="get_options.hxx"/>
13411357
<file role="src" name="get_replica_result.hxx"/>
13421358
<file role="src" name="get_result.hxx"/>
@@ -1433,6 +1449,7 @@
14331449
<file role="src" name="transaction_op_error_context.hxx"/>
14341450
<file role="src" name="transactions.hxx"/>
14351451
<file role="src" name="unlock_options.hxx"/>
1452+
<file role="src" name="update_bucket_options.hxx"/>
14361453
<file role="src" name="upsert_options.hxx"/>
14371454
<file role="src" name="wan_development_configuration_profile.hxx"/>
14381455
<file role="src" name="watch_query_indexes_options.hxx"/>

src/wrapper/conversion_utilities.cxx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,9 @@ zval_to_query_request(const zend_string* statement, const zval* options)
341341
if (auto e = cb_assign_boolean(request.adhoc, options, "adHoc"); e.ec) {
342342
return { {}, e };
343343
}
344+
if (auto e = cb_assign_boolean(request.use_replica, options, "useReplica"); e.ec) {
345+
return { {}, e };
346+
}
344347
if (const zval* value = zend_symtable_str_find(Z_ARRVAL_P(options), ZEND_STRL("positionalParameters"));
345348
value != nullptr && Z_TYPE_P(value) == IS_ARRAY) {
346349
std::vector<core::json_string> params{};

0 commit comments

Comments
 (0)