@@ -599,15 +599,7 @@ void object_to_bson(zval *object, php_phongo_bson_flags_t flags, const char *key
599
599
{
600
600
bson_t child ;
601
601
602
- if (Z_TYPE_P (object ) != IS_OBJECT || instanceof_function (Z_OBJCE_P (object ), zend_standard_class_def TSRMLS_CC )) {
603
- mongoc_log (MONGOC_LOG_LEVEL_TRACE , MONGOC_LOG_DOMAIN , "encoding as-if was stdclass" );
604
- bson_append_document_begin (bson , key , key_len , & child );
605
- zval_to_bson (object , flags , & child , NULL TSRMLS_CC );
606
- bson_append_document_end (bson , & child );
607
- return ;
608
- }
609
-
610
- if (instanceof_function (Z_OBJCE_P (object ), php_phongo_type_ce TSRMLS_CC )) {
602
+ if (Z_TYPE_P (object ) == IS_OBJECT && instanceof_function (Z_OBJCE_P (object ), php_phongo_type_ce TSRMLS_CC )) {
611
603
if (instanceof_function (Z_OBJCE_P (object ), php_phongo_serializable_ce TSRMLS_CC )) {
612
604
zval * obj_data = NULL ;
613
605
bson_t child ;
@@ -660,7 +652,7 @@ void object_to_bson(zval *object, php_phongo_bson_flags_t flags, const char *key
660
652
if (instanceof_function (Z_OBJCE_P (object ), php_phongo_objectid_ce TSRMLS_CC )) {
661
653
bson_oid_t oid ;
662
654
663
- mongoc_log (MONGOC_LOG_LEVEL_TRACE , MONGOC_LOG_DOMAIN , "encoding _id " );
655
+ mongoc_log (MONGOC_LOG_LEVEL_TRACE , MONGOC_LOG_DOMAIN , "encoding ObjectId " );
664
656
php_phongo_objectid_get_id (object , & oid TSRMLS_CC );
665
657
bson_append_oid (bson , key , key_len , & oid );
666
658
return ;
@@ -687,10 +679,10 @@ void object_to_bson(zval *object, php_phongo_bson_flags_t flags, const char *key
687
679
}
688
680
if (instanceof_function (Z_OBJCE_P (object ), php_phongo_javascript_ce TSRMLS_CC )) {
689
681
if (php_phongo_javascript_has_scope (object TSRMLS_CC )) {
690
- mongoc_log (MONGOC_LOG_LEVEL_TRACE , MONGOC_LOG_DOMAIN , "encoding Javascript w/ scope" );
682
+ mongoc_log (MONGOC_LOG_LEVEL_TRACE , MONGOC_LOG_DOMAIN , "encoding Javascript with scope" );
691
683
bson_append_code (bson , key , key_len , php_phongo_javascript_get_javascript (object TSRMLS_CC ));
692
684
} else {
693
- mongoc_log (MONGOC_LOG_LEVEL_TRACE , MONGOC_LOG_DOMAIN , "encoding Javascript wo/ scope" );
685
+ mongoc_log (MONGOC_LOG_LEVEL_TRACE , MONGOC_LOG_DOMAIN , "encoding Javascript without scope" );
694
686
bson_append_code_with_scope (bson , key , key_len , php_phongo_javascript_get_javascript (object TSRMLS_CC ), php_phongo_javascript_get_scope (object TSRMLS_CC ));
695
687
}
696
688
return ;
@@ -716,11 +708,14 @@ void object_to_bson(zval *object, php_phongo_bson_flags_t flags, const char *key
716
708
bson_append_minkey (bson , key , key_len );
717
709
return ;
718
710
}
711
+
712
+ phongo_throw_exception (PHONGO_ERROR_UNEXPECTED_VALUE TSRMLS_CC , "Unexpected %s instance: %s" , php_phongo_type_ce -> name , Z_OBJCE_P (object )-> name );
713
+ return ;
719
714
}
720
715
721
- /* Even if we don't know how to encode the object, ensure that we at least
722
- * create an empty BSON document. */
716
+ mongoc_log (MONGOC_LOG_LEVEL_TRACE , MONGOC_LOG_DOMAIN , "encoding document" );
723
717
bson_append_document_begin (bson , key , key_len , & child );
718
+ zval_to_bson (object , flags , & child , NULL TSRMLS_CC );
724
719
bson_append_document_end (bson , & child );
725
720
}
726
721
void phongo_bson_append (bson_t * bson , php_phongo_bson_flags_t flags , const char * key , long key_len , int entry_type , zval * entry TSRMLS_DC )
@@ -810,6 +805,10 @@ PHONGO_API void zval_to_bson(zval *data, php_phongo_bson_flags_t flags, bson_t *
810
805
}
811
806
}
812
807
808
+ break ;
809
+ } else if (instanceof_function (Z_OBJCE_P (data ), php_phongo_type_ce TSRMLS_CC )) {
810
+ phongo_throw_exception (PHONGO_ERROR_UNEXPECTED_VALUE TSRMLS_CC , "%s cannot be serialized as a root element" , Z_OBJCE_P (data )-> name );
811
+
813
812
break ;
814
813
}
815
814
/* break intentionally omitted */
0 commit comments