Skip to content

Commit eeedcfe

Browse files
committed
PCBC-533: implement FTS index management APIs
Change-Id: Id3b5c2059a10bcfa7916577096479eca98290917 Reviewed-on: http://review.couchbase.org/97929 Tested-by: Build Bot <[email protected]> Reviewed-by: Sergey Avseyev <[email protected]>
1 parent 134feee commit eeedcfe

File tree

8 files changed

+366
-6
lines changed

8 files changed

+366
-6
lines changed

config.m4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ COUCHBASE_FILES=" \
126126
src/couchbase/view_query_encodable.c \
127127
src/couchbase/spatial_view_query.c \
128128
transcoding.c \
129+
src/couchbase/search_index_manager.c \
129130
"
130131

131132
AC_CHECK_HEADERS([zlib.h])

config.w32

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ if (PHP_COUCHBASE != "no") {
4545
"n1ql_index.c " +
4646
"n1ql_query.c " +
4747
"pool.c " +
48+
"search_index_manager.c " +
4849
"search_query.c " +
4950
"spatial_view_query.c " +
5051
"view_query.c " +

couchbase.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,7 @@ PHP_MINIT_FUNCTION(couchbase)
319319
PHP_MINIT(SearchSortId)(INIT_FUNC_ARGS_PASSTHRU);
320320
PHP_MINIT(SearchSortScore)(INIT_FUNC_ARGS_PASSTHRU);
321321
PHP_MINIT(CryptoProvider)(INIT_FUNC_ARGS_PASSTHRU);
322+
PHP_MINIT(SearchIndexManager)(INIT_FUNC_ARGS_PASSTHRU);
322323

323324
PCBC_REGISTER_CONST(PERSISTTO_MASTER);
324325
PCBC_REGISTER_CONST(PERSISTTO_ONE);

couchbase.h

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ PHP_MINIT_FUNCTION(SearchSortGeoDistance);
174174
PHP_MINIT_FUNCTION(SearchSortId);
175175
PHP_MINIT_FUNCTION(SearchSortScore);
176176
PHP_MINIT_FUNCTION(CryptoProvider);
177+
PHP_MINIT_FUNCTION(SearchIndexManager);
177178

178179
zval *bop_get_return_doc(zval *return_value, const char *key, int key_len, int is_mapped TSRMLS_DC);
179180

@@ -496,6 +497,12 @@ typedef struct {
496497
PCBC_ZEND_OBJECT_POST
497498
} pcbc_cluster_manager_t;
498499

500+
typedef struct {
501+
PCBC_ZEND_OBJECT_PRE
502+
pcbc_connection_t *conn;
503+
PCBC_ZEND_OBJECT_POST
504+
} pcbc_search_index_manager_t;
505+
499506
struct pcbc_crypto_id {
500507
char *name;
501508
int name_len;
@@ -825,6 +832,7 @@ void pcbc_bucket_view_request(pcbc_bucket_t *bucket, lcb_CMDVIEWQUERY *cmd, int
825832
zval *return_value TSRMLS_DC);
826833
void pcbc_spatial_view_query_init(zval *return_value, char *design_document, int design_document_len, char *view_name,
827834
int view_name_len TSRMLS_DC);
835+
void pcbc_search_index_manager_init(zval *return_value, pcbc_bucket_manager_t *bucket_manager TSRMLS_DC);
828836

829837
void pcbc_boolean_field_search_query_init(zval *return_value, zend_bool value TSRMLS_DC);
830838
void pcbc_boolean_search_query_init(zval *return_value TSRMLS_DC);
@@ -851,7 +859,8 @@ void pcbc_numeric_range_search_facet_init(zval *return_value, char *field, int f
851859
void pcbc_search_sort_id_init(zval *return_value TSRMLS_DC);
852860
void pcbc_search_sort_score_init(zval *return_value TSRMLS_DC);
853861
void pcbc_search_sort_field_init(zval *return_value, const char *field, int field_len TSRMLS_DC);
854-
void pcbc_search_sort_geo_distance_init(zval *return_value, const char *field, int field_len, double lon, double lat TSRMLS_DC);
862+
void pcbc_search_sort_geo_distance_init(zval *return_value, const char *field, int field_len, double lon,
863+
double lat TSRMLS_DC);
855864

856865
#if PHP_VERSION_ID >= 70000
857866
void pcbc_lookup_in_builder_init(zval *return_value, zval *bucket, const char *id, int id_len, zval *args,
@@ -877,8 +886,10 @@ void pcbc_password_authenticator_init(zval *return_value, char *username, int us
877886

878887
void pcbc_crypto_register(pcbc_bucket_t *obj, const char *name, int name_len, zval *provider TSRMLS_DC);
879888
void pcbc_crypto_unregister(pcbc_bucket_t *obj, const char *name, int name_len TSRMLS_DC);
880-
void pcbc_crypto_encrypt_fields(pcbc_bucket_t *obj, zval *document, zval *options, const char *prefix, zval *return_value TSRMLS_DC);
881-
void pcbc_crypto_decrypt_fields(pcbc_bucket_t *obj, zval *document, zval *options, const char *prefix, zval *return_value TSRMLS_DC);
889+
void pcbc_crypto_encrypt_fields(pcbc_bucket_t *obj, zval *document, zval *options, const char *prefix,
890+
zval *return_value TSRMLS_DC);
891+
void pcbc_crypto_decrypt_fields(pcbc_bucket_t *obj, zval *document, zval *options, const char *prefix,
892+
zval *return_value TSRMLS_DC);
882893

883894
#if PHP_VERSION_ID >= 70000
884895
static inline pcbc_cluster_t *pcbc_cluster_fetch_object(zend_object *obj)
@@ -945,6 +956,10 @@ static inline pcbc_user_settings_t *pcbc_user_settings_fetch_object(zend_object
945956
{
946957
return (pcbc_user_settings_t *)((char *)obj - XtOffsetOf(pcbc_user_settings_t, std));
947958
}
959+
static inline pcbc_search_index_manager_t *pcbc_search_index_manager_fetch_object(zend_object *obj)
960+
{
961+
return (pcbc_search_index_manager_t *)((char *)obj - XtOffsetOf(pcbc_search_index_manager_t, std));
962+
}
948963
#define Z_CLUSTER_OBJ(zo) (pcbc_cluster_fetch_object(zo))
949964
#define Z_CLUSTER_OBJ_P(zv) (pcbc_cluster_fetch_object(Z_OBJ_P(zv)))
950965
#define Z_CLUSTER_MANAGER_OBJ(zo) (pcbc_cluster_manager_fetch_object(zo))
@@ -977,6 +992,8 @@ static inline pcbc_user_settings_t *pcbc_user_settings_fetch_object(zend_object
977992
#define Z_CERT_AUTHENTICATOR_OBJ_P(zv) (pcbc_cert_authenticator_fetch_object(Z_OBJ_P(zv)))
978993
#define Z_USER_SETTINGS_OBJ(zo) (pcbc_user_settings_fetch_object(zo))
979994
#define Z_USER_SETTINGS_OBJ_P(zv) (pcbc_user_settings_fetch_object(Z_OBJ_P(zv)))
995+
#define Z_SEARCH_INDEX_MANAGER_OBJ(zo) (pcbc_search_index_manager_fetch_object(zo))
996+
#define Z_SEARCH_INDEX_MANAGER_OBJ_P(zv) (pcbc_search_index_manager_fetch_object(Z_OBJ_P(zv)))
980997
#else
981998
#define Z_CLUSTER_OBJ(zo) ((pcbc_cluster_t *)zo)
982999
#define Z_CLUSTER_OBJ_P(zv) ((pcbc_cluster_t *)zend_object_store_get_object(zv TSRMLS_CC))
@@ -1010,6 +1027,8 @@ static inline pcbc_user_settings_t *pcbc_user_settings_fetch_object(zend_object
10101027
#define Z_CERT_AUTHENTICATOR_OBJ_P(zv) ((pcbc_cert_authenticator_t *)zend_object_store_get_object(zv TSRMLS_CC))
10111028
#define Z_USER_SETTINGS_OBJ(zo) ((pcbc_user_settings_t *)zo)
10121029
#define Z_USER_SETTINGS_OBJ_P(zv) ((pcbc_user_settings_t *)zend_object_store_get_object(zv TSRMLS_CC))
1030+
#define Z_SEARCH_INDEX_MANAGER_OBJ(zo) ((pcbc_search_index_manager_t *)zo)
1031+
#define Z_SEARCH_INDEX_MANAGER_OBJ_P(zv) ((pcbc_search_index_manager_t *)zend_object_store_get_object(zv TSRMLS_CC))
10131032
#endif
10141033

10151034
typedef struct {

examples/search/index_management.php

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
3+
$cluster = new \Couchbase\Cluster('couchbase://localhost');
4+
$cluster->authenticateAs('Administrator', 'password');
5+
6+
$bucket = $cluster->openBucket('travel-sample');
7+
8+
$manager = $bucket->manager()->searchIndexManager();
9+
10+
var_dump($manager->listIndexDefinitions());
11+
12+
var_dump($manager->getIndexDefinition('travel-sample-index-hotel-description'));
13+
14+
var_dump($manager->getIndexedDocumentsCount('travel-sample-index-hotel-description'));
15+
16+
$indexDef = '
17+
{
18+
"type": "fulltext-index",
19+
"name": "testindex",
20+
"sourceType": "couchbase",
21+
"sourceName": "travel-sample",
22+
"planParams": {
23+
"maxPartitionsPerPIndex": 171
24+
},
25+
"params": {
26+
"doc_config": {
27+
"mode": "type_field",
28+
"type_field": "type"
29+
},
30+
"mapping": {
31+
"default_analyzer": "standard",
32+
"default_datetime_parser": "dateTimeOptional",
33+
"default_field": "_all",
34+
"default_mapping": {
35+
"dynamic": true,
36+
"enabled": true
37+
},
38+
"default_type": "_default",
39+
"index_dynamic": true,
40+
"store_dynamic": false
41+
},
42+
"store": {
43+
"kvStoreName": "mossStore"
44+
}
45+
},
46+
"sourceParams": {}
47+
}
48+
';
49+
50+
var_dump($manager->createIndex('testindex', $indexDef));
51+
52+
var_dump($manager->deleteIndex('testindex'));

src/couchbase/bucket_manager.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,20 @@ PHP_METHOD(BucketManager, dropN1qlIndex)
425425
pcbc_n1ix_drop(obj, &cmd, ignore_if_not_exist, return_value TSRMLS_CC);
426426
} /* }}} */
427427

428+
/* {{{ proto \Couchbase\SearchIndexManager Cluster::searchIndexManager() */
429+
PHP_METHOD(BucketManager, searchIndexManager)
430+
{
431+
pcbc_bucket_manager_t *obj;
432+
int rv;
433+
434+
rv = zend_parse_parameters_none();
435+
if (rv == FAILURE) {
436+
RETURN_NULL();
437+
}
438+
obj = Z_BUCKET_MANAGER_OBJ_P(getThis());
439+
pcbc_search_index_manager_init(return_value, obj TSRMLS_CC);
440+
} /* }}} */
441+
428442
ZEND_BEGIN_ARG_INFO_EX(ai_BucketManager_none, 0, 0, 0)
429443
ZEND_END_ARG_INFO()
430444

@@ -479,6 +493,7 @@ zend_function_entry bucket_manager_methods[] = {
479493
PHP_ME(BucketManager, createN1qlIndex, ai_BucketManager_createN1qlIndex, ZEND_ACC_PUBLIC)
480494
PHP_ME(BucketManager, dropN1qlPrimaryIndex, ai_BucketManager_dropN1qlPrimaryIndex, ZEND_ACC_PUBLIC)
481495
PHP_ME(BucketManager, dropN1qlIndex, ai_BucketManager_dropN1qlIndex, ZEND_ACC_PUBLIC)
496+
PHP_ME(BucketManager, searchIndexManager, ai_BucketManager_none, ZEND_ACC_PUBLIC)
482497
PHP_FE_END
483498
};
484499
// clang-format on

src/couchbase/cluster_manager.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,8 @@ PHP_METHOD(ClusterManager, removeUser)
268268
}
269269
} /* }}} */
270270

271-
/* {{{ proto array ClusterManager::upsertUser(string $name, \Couchbase\UserSettings $settings, $domain = ClusterManager::RBAC_DOMAIN_LOCAL) */
271+
/* {{{ proto array ClusterManager::upsertUser(string $name, \Couchbase\UserSettings $settings, $domain =
272+
* ClusterManager::RBAC_DOMAIN_LOCAL) */
272273
PHP_METHOD(ClusterManager, upsertUser)
273274
{
274275
pcbc_cluster_manager_t *obj;
@@ -285,7 +286,8 @@ PHP_METHOD(ClusterManager, upsertUser)
285286

286287
obj = Z_CLUSTER_MANAGER_OBJ_P(getThis());
287288

288-
rv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sO|l", &name, &name_len, &settings, pcbc_user_settings_ce, &domain);
289+
rv = zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sO|l", &name, &name_len, &settings, pcbc_user_settings_ce,
290+
&domain);
289291
if (rv == FAILURE) {
290292
return;
291293
}
@@ -373,7 +375,6 @@ ZEND_BEGIN_ARG_INFO_EX(ai_ClusterManager_listUsers, 0, 0, 1)
373375
ZEND_ARG_INFO(0, domain)
374376
ZEND_END_ARG_INFO()
375377

376-
377378
// clang-format off
378379
zend_function_entry cluster_manager_methods[] = {
379380
PHP_ME(ClusterManager, __construct, ai_ClusterManager_none, ZEND_ACC_PRIVATE | ZEND_ACC_FINAL | ZEND_ACC_CTOR)

0 commit comments

Comments
 (0)