22
22
#define LOGARGS (lvl ) LCB_LOG_##lvl, NULL, "pcbc/boolean_query", __FILE__, __LINE__
23
23
24
24
zend_class_entry * pcbc_boolean_search_query_ce ;
25
+ extern zend_class_entry * pcbc_conjunction_search_query_ce ;
26
+ extern zend_class_entry * pcbc_disjunction_search_query_ce ;
25
27
26
28
PHP_METHOD (BooleanSearchQuery , boost )
27
29
{
@@ -40,111 +42,42 @@ PHP_METHOD(BooleanSearchQuery, boost)
40
42
41
43
PHP_METHOD (BooleanSearchQuery , must )
42
44
{
43
- zval * args = NULL ;
44
- int num_args = 0 ;
45
- int rv ;
45
+ zval * conjunct = NULL ;
46
46
47
- rv = zend_parse_parameters ( ZEND_NUM_ARGS () TSRMLS_CC , "+ " , & args , & num_args );
48
- if ( rv == FAILURE ) {
47
+ if ( zend_parse_parameters_throw ( ZEND_NUM_ARGS () TSRMLS_CC , "O " , & conjunct , pcbc_conjunction_search_query_ce ) ==
48
+ FAILURE ) {
49
49
return ;
50
50
}
51
51
52
- if (num_args && args ) {
53
- zval * container , rv1 ;
54
- container = zend_read_property (pcbc_boolean_search_query_ce , getThis (), ZEND_STRL ("must" ), 0 , & rv1 );
55
- if (Z_TYPE_P (container ) == IS_NULL ) {
56
- array_init (& rv1 );
57
- container = & rv1 ;
58
- zend_update_property (pcbc_boolean_search_query_ce , getThis (), ZEND_STRL ("must" ), container TSRMLS_CC );
59
- Z_DELREF_P (container );
60
- }
61
- int i ;
62
- for (i = 0 ; i < num_args ; ++ i ) {
63
- zval * query ;
64
- query = & args [i ];
65
- if (Z_TYPE_P (query ) != IS_OBJECT ||
66
- !instanceof_function (Z_OBJCE_P (query ), pcbc_search_query_ce TSRMLS_CC )) {
67
- pcbc_log (LOGARGS (WARN ), "query has to implement SearchQuery interface (skipping argument #%d)" , i );
68
- continue ;
69
- }
70
- add_next_index_zval (container , query );
71
- PCBC_ADDREF_P (query );
72
- }
73
- }
52
+ zend_update_property (pcbc_boolean_search_query_ce , getThis (), ZEND_STRL ("must" ), conjunct TSRMLS_CC );
74
53
75
54
RETURN_ZVAL (getThis (), 1 , 0 );
76
55
}
77
56
78
57
PHP_METHOD (BooleanSearchQuery , mustNot )
79
58
{
80
- zval * args = NULL ;
81
- int num_args = 0 ;
82
- int rv ;
59
+ zval * disjunct = NULL ;
83
60
84
- rv = zend_parse_parameters ( ZEND_NUM_ARGS () TSRMLS_CC , "+ " , & args , & num_args );
85
- if ( rv == FAILURE ) {
61
+ if ( zend_parse_parameters_throw ( ZEND_NUM_ARGS () TSRMLS_CC , "O " , & disjunct , pcbc_disjunction_search_query_ce ) ==
62
+ FAILURE ) {
86
63
return ;
87
64
}
88
65
89
- if (num_args && args ) {
90
- zval * container , rv1 ;
91
- container = zend_read_property (pcbc_boolean_search_query_ce , getThis (), ZEND_STRL ("must_not" ), 0 , & rv1 );
92
- if (Z_TYPE_P (container ) == IS_NULL ) {
93
- array_init (& rv1 );
94
- container = & rv1 ;
95
- zend_update_property (pcbc_boolean_search_query_ce , getThis (), ZEND_STRL ("must_not" ), container TSRMLS_CC );
96
- Z_DELREF_P (container );
97
- }
98
- int i ;
99
- for (i = 0 ; i < num_args ; ++ i ) {
100
- zval * query ;
101
- query = & args [i ];
102
- if (Z_TYPE_P (query ) != IS_OBJECT ||
103
- !instanceof_function (Z_OBJCE_P (query ), pcbc_search_query_ce TSRMLS_CC )) {
104
- pcbc_log (LOGARGS (WARN ), "query has to implement SearchQuery interface (skipping argument #%d)" , i );
105
- continue ;
106
- }
107
- add_next_index_zval (container , query );
108
- PCBC_ADDREF_P (query );
109
- }
110
- }
66
+ zend_update_property (pcbc_boolean_search_query_ce , getThis (), ZEND_STRL ("mustNot" ), disjunct TSRMLS_CC );
111
67
112
68
RETURN_ZVAL (getThis (), 1 , 0 );
113
69
}
114
70
115
71
PHP_METHOD (BooleanSearchQuery , should )
116
72
{
117
- zval * args = NULL ;
118
- int num_args = 0 ;
119
- int rv ;
73
+ zval * disjunct = NULL ;
120
74
121
- rv = zend_parse_parameters ( ZEND_NUM_ARGS () TSRMLS_CC , "+ " , & args , & num_args );
122
- if ( rv == FAILURE ) {
75
+ if ( zend_parse_parameters_throw ( ZEND_NUM_ARGS () TSRMLS_CC , "O " , & disjunct , pcbc_disjunction_search_query_ce ) ==
76
+ FAILURE ) {
123
77
return ;
124
78
}
125
79
126
- if (num_args && args ) {
127
- zval * container , rv1 ;
128
- container = zend_read_property (pcbc_boolean_search_query_ce , getThis (), ZEND_STRL ("should" ), 0 , & rv1 );
129
- if (Z_TYPE_P (container ) == IS_NULL ) {
130
- array_init (& rv1 );
131
- container = & rv1 ;
132
- zend_update_property (pcbc_boolean_search_query_ce , getThis (), ZEND_STRL ("should" ), container TSRMLS_CC );
133
- Z_DELREF_P (container );
134
- }
135
- int i ;
136
- for (i = 0 ; i < num_args ; ++ i ) {
137
- zval * query ;
138
- query = & args [i ];
139
- if (Z_TYPE_P (query ) != IS_OBJECT ||
140
- !instanceof_function (Z_OBJCE_P (query ), pcbc_search_query_ce TSRMLS_CC )) {
141
- pcbc_log (LOGARGS (WARN ), "query has to implement SearchQuery interface (skipping argument #%d)" , i );
142
- continue ;
143
- }
144
- add_next_index_zval (container , query );
145
- PCBC_ADDREF_P (query );
146
- }
147
- }
80
+ zend_update_property (pcbc_boolean_search_query_ce , getThis (), ZEND_STRL ("should" ), disjunct TSRMLS_CC );
148
81
149
82
RETURN_ZVAL (getThis (), 1 , 0 );
150
83
}
@@ -193,17 +126,25 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(ai_BooleanSearchQuery_boost, 0, 1, Couchb
193
126
ZEND_ARG_TYPE_INFO (0 , boost , IS_DOUBLE , 0 )
194
127
ZEND_END_ARG_INFO ()
195
128
196
- ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX (ai_BooleanSearchQuery_queries , 0 , 1 , Couchbase \\BooleanSearchQuery , 0 )
197
- PCBC_ARG_VARIADIC_INFO (0 , queries )
129
+ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX (ai_BooleanSearchQuery_must , 0 , 1 , Couchbase \\BooleanSearchQuery , 0 )
130
+ ZEND_ARG_OBJ_INFO (0 , query , Couchbase \\ConjunctionSearchQuery , 0 )
131
+ ZEND_END_ARG_INFO ()
132
+
133
+ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX (ai_BooleanSearchQuery_mustNot , 0 , 1 , Couchbase \\BooleanSearchQuery , 0 )
134
+ ZEND_ARG_OBJ_INFO (0 , query , Couchbase \\DisjunctionSearchQuery , 0 )
135
+ ZEND_END_ARG_INFO ()
136
+
137
+ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX (ai_BooleanSearchQuery_should , 0 , 1 , Couchbase \\BooleanSearchQuery , 0 )
138
+ ZEND_ARG_OBJ_INFO (0 , query , Couchbase \\DisjunctionSearchQuery , 0 )
198
139
ZEND_END_ARG_INFO ()
199
140
200
141
// clang-format off
201
142
zend_function_entry boolean_search_query_methods [] = {
202
143
PHP_ME (BooleanSearchQuery , jsonSerialize , ai_BooleanSearchQuery_none , ZEND_ACC_PUBLIC )
203
144
PHP_ME (BooleanSearchQuery , boost , ai_BooleanSearchQuery_boost , ZEND_ACC_PUBLIC )
204
- PHP_ME (BooleanSearchQuery , must , ai_BooleanSearchQuery_queries , ZEND_ACC_PUBLIC )
205
- PHP_ME (BooleanSearchQuery , mustNot , ai_BooleanSearchQuery_queries , ZEND_ACC_PUBLIC )
206
- PHP_ME (BooleanSearchQuery , should , ai_BooleanSearchQuery_queries , ZEND_ACC_PUBLIC )
145
+ PHP_ME (BooleanSearchQuery , must , ai_BooleanSearchQuery_must , ZEND_ACC_PUBLIC )
146
+ PHP_ME (BooleanSearchQuery , mustNot , ai_BooleanSearchQuery_mustNot , ZEND_ACC_PUBLIC )
147
+ PHP_ME (BooleanSearchQuery , should , ai_BooleanSearchQuery_should , ZEND_ACC_PUBLIC )
207
148
PHP_FE_END
208
149
};
209
150
// clang-format on
0 commit comments