@@ -238,7 +238,7 @@ static void php_phongo_log(mongoc_log_level_t log_level, const char *log_domain,
238238/* }}} */
239239
240240/* {{{ Init objects */
241- static void phongo_cursor_init (zval * return_value , mongoc_client_t * client , mongoc_cursor_t * cursor , zval * readPreference TSRMLS_DC ) /* {{{ */
241+ static void phongo_cursor_init (zval * return_value , mongoc_client_t * client , mongoc_cursor_t * cursor , zval * readPreference , zval * session TSRMLS_DC ) /* {{{ */
242242{
243243 php_phongo_cursor_t * intern ;
244244
@@ -256,15 +256,24 @@ static void phongo_cursor_init(zval *return_value, mongoc_client_t *client, mong
256256#else
257257 Z_ADDREF_P (readPreference );
258258 intern -> read_preference = readPreference ;
259+ #endif
260+ }
261+
262+ if (session ) {
263+ #if PHP_VERSION_ID >= 70000
264+ ZVAL_ZVAL (& intern -> session , session , 1 , 0 );
265+ #else
266+ Z_ADDREF_P (session );
267+ intern -> session = session ;
259268#endif
260269 }
261270} /* }}} */
262271
263- static void phongo_cursor_init_for_command (zval * return_value , mongoc_client_t * client , mongoc_cursor_t * cursor , const char * db , zval * command , zval * readPreference TSRMLS_DC ) /* {{{ */
272+ static void phongo_cursor_init_for_command (zval * return_value , mongoc_client_t * client , mongoc_cursor_t * cursor , const char * db , zval * command , zval * readPreference , zval * session TSRMLS_DC ) /* {{{ */
264273{
265274 php_phongo_cursor_t * intern ;
266275
267- phongo_cursor_init (return_value , client , cursor , readPreference TSRMLS_CC );
276+ phongo_cursor_init (return_value , client , cursor , readPreference , session TSRMLS_CC );
268277 intern = Z_CURSOR_OBJ_P (return_value );
269278
270279 intern -> database = estrdup (db );
@@ -277,11 +286,11 @@ static void phongo_cursor_init_for_command(zval *return_value, mongoc_client_t *
277286#endif
278287} /* }}} */
279288
280- static void phongo_cursor_init_for_query (zval * return_value , mongoc_client_t * client , mongoc_cursor_t * cursor , const char * namespace , zval * query , zval * readPreference TSRMLS_DC ) /* {{{ */
289+ static void phongo_cursor_init_for_query (zval * return_value , mongoc_client_t * client , mongoc_cursor_t * cursor , const char * namespace , zval * query , zval * readPreference , zval * session TSRMLS_DC ) /* {{{ */
281290{
282291 php_phongo_cursor_t * intern ;
283292
284- phongo_cursor_init (return_value , client , cursor , readPreference TSRMLS_CC );
293+ phongo_cursor_init (return_value , client , cursor , readPreference , session TSRMLS_CC );
285294 intern = Z_CURSOR_OBJ_P (return_value );
286295
287296 /* namespace has already been validated by phongo_execute_query() */
@@ -748,6 +757,7 @@ int phongo_execute_query(mongoc_client_t *client, const char *namespace, zval *z
748757 char * collname ;
749758 mongoc_collection_t * collection ;
750759 zval * zreadPreference = NULL ;
760+ zval * zsession = NULL ;
751761
752762 if (!phongo_split_namespace (namespace , & dbname , & collname )) {
753763 phongo_throw_exception (PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC , "%s: %s" , "Invalid namespace provided" , namespace );
@@ -769,7 +779,7 @@ int phongo_execute_query(mongoc_client_t *client, const char *namespace, zval *z
769779 return false;
770780 }
771781
772- if (!phongo_parse_session (options , client , query -> opts , NULL TSRMLS_CC )) {
782+ if (!phongo_parse_session (options , client , query -> opts , & zsession TSRMLS_CC )) {
773783 /* Exception should already have been thrown */
774784 mongoc_collection_destroy (collection );
775785 return false;
@@ -799,7 +809,8 @@ int phongo_execute_query(mongoc_client_t *client, const char *namespace, zval *z
799809 return true;
800810 }
801811
802- phongo_cursor_init_for_query (return_value , client , cursor , namespace , zquery , zreadPreference TSRMLS_CC );
812+ phongo_cursor_init_for_query (return_value , client , cursor , namespace , zquery , zreadPreference , zsession TSRMLS_CC );
813+
803814 return true;
804815} /* }}} */
805816
@@ -825,6 +836,7 @@ int phongo_execute_command(mongoc_client_t *client, php_phongo_command_type_t ty
825836 bson_t opts = BSON_INITIALIZER ;
826837 mongoc_cursor_t * cmd_cursor ;
827838 zval * zreadPreference = NULL ;
839+ zval * zsession = NULL ;
828840 int result ;
829841
830842 command = Z_COMMAND_OBJ_P (zcommand );
@@ -841,7 +853,7 @@ int phongo_execute_command(mongoc_client_t *client, php_phongo_command_type_t ty
841853 return false;
842854 }
843855
844- if (!phongo_parse_session (options , client , & opts , NULL TSRMLS_CC )) {
856+ if (!phongo_parse_session (options , client , & opts , & zsession TSRMLS_CC )) {
845857 /* Exception should already have been thrown */
846858 bson_destroy (& opts );
847859 return false;
@@ -922,7 +934,7 @@ int phongo_execute_command(mongoc_client_t *client, php_phongo_command_type_t ty
922934 bson_destroy (& reply );
923935 }
924936
925- phongo_cursor_init_for_command (return_value , client , cmd_cursor , db , zcommand , zreadPreference TSRMLS_CC );
937+ phongo_cursor_init_for_command (return_value , client , cmd_cursor , db , zcommand , zreadPreference , zsession TSRMLS_CC );
926938 return true;
927939} /* }}} */
928940/* }}} */
0 commit comments