Changeset 11177
- Timestamp:
- 07/11/07 15:17:12 (2 years ago)
- Files:
-
- trunk/midgard/apis/php4/midgard.c (modified) (1 diff)
- trunk/midgard/apis/php4/php_midgard.h (modified) (1 diff)
- trunk/midgard/apis/php4/php_midgard_collector.c (modified) (2 diffs)
- trunk/midgard/apis/php4/php_midgard_connection.c (modified) (1 diff)
- trunk/midgard/apis/php4/php_midgard_gobject_generic.c (modified) (12 diffs)
- trunk/midgard/apis/php4/php_midgard_object_parameter.c (modified) (1 diff)
- trunk/midgard/apis/php4/query_builder.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/midgard/apis/php4/midgard.c
r11060 r11177 266 266 if(objid->type != IS_NULL) { 267 267 268 GValue *value = php_midgard_zval2gvalue(objid); 268 GValue *value = 269 php_midgard_zval2gvalue(objid); 269 270 gobject = midgard_object_new(mgd, 270 271 (const gchar *) zend_classname, trunk/midgard/apis/php4/php_midgard.h
r10994 r11177 192 192 193 193 extern GValue *php_midgard_zval2gvalue(zval *zvalue); 194 extern gboolean php_midgard_gvalue2zval(GValue *gvalue, zval *zvalue); 194 extern gboolean php_midgard_gvalue2zval(GValue *gvalue, zval *zvalue, 195 MidgardDBObjectClass *klass, const gchar *pname); 195 196 196 197 zend_class_entry *midgard_php_register_internal_class( trunk/midgard/apis/php4/php_midgard_collector.c
r10898 r11177 163 163 zval *zvalue; 164 164 MAKE_STD_ZVAL(zvalue); 165 php_midgard_gvalue2zval(gvalue, zvalue); 165 /* FIXME, we need to get underlying object here */ 166 php_midgard_gvalue2zval(gvalue, zvalue, NULL, NULL); 166 167 167 168 add_assoc_zval(zend_hash, … … 222 223 return; 223 224 224 php_midgard_gvalue2zval(gvalue, return_value );225 php_midgard_gvalue2zval(gvalue, return_value, NULL, NULL); 225 226 } 226 227 trunk/midgard/apis/php4/php_midgard_connection.c
r11061 r11177 94 94 zval *pid; 95 95 MAKE_STD_ZVAL(pid); 96 php_midgard_gvalue2zval(&pval, pid );96 php_midgard_gvalue2zval(&pval, pid, NULL, NULL); 97 97 g_value_unset(&pval); 98 98 zend_hash_update(Z_ARRVAL_PP(_midgard), trunk/midgard/apis/php4/php_midgard_gobject_generic.c
r10990 r11177 17 17 #include "php_midgard.h" 18 18 #include "php_midgard_gobject.h" 19 19 #include <TSRM.h> 20 21 /* static prototypes */ 22 static void php_midgard_datetime_from_string(const gchar *date, zval *zvalue); 23 static const gchar *php_midgard_string_from_datetime(zval *zvalue); 20 24 21 25 /* GVALUE ROUTINES */ … … 31 35 HashPosition iterator; 32 36 GValue *tmpval; 37 const gchar *dtstr; 38 zend_class_entry *dtce; 33 39 34 40 switch(Z_TYPE_P(zvalue)) { … … 74 80 75 81 case IS_OBJECT: 76 php_error(E_WARNING, "IS_OBJECT type not yet supported"); 82 dtce = php_midgard_get_baseclass_ptr_by_name("DateTime"); 83 84 /* DateTime object, convert to string value */ 85 if(Z_OBJCE_P(zvalue) == dtce) { 86 87 dtstr = php_midgard_string_from_datetime(zvalue); 88 g_value_init(gvalue, G_TYPE_STRING); 89 g_value_set_string(gvalue, dtstr); 90 g_warning("DATESTR '%s'", dtstr); 91 92 } else { 93 94 php_error(E_WARNING, "IS_OBJECT type not fully supported"); 95 } 77 96 break; 78 97 … … 86 105 } 87 106 88 gboolean php_midgard_gvalue2zval(GValue *gvalue, zval *zvalue) 107 gboolean php_midgard_gvalue2zval(GValue *gvalue, zval *zvalue, 108 MidgardDBObjectClass *dbklass, const gchar *pname) 89 109 { 90 110 g_assert(gvalue); … … 100 120 GValue *arr_val; 101 121 zval *zarr_val; 102 122 123 /* It's overloaded, but we need to initialize DateTime object */ 124 /* Disabled for a while 125 if(dbklass != NULL) { 126 127 MidgardReflectionProperty *mrp = 128 midgard_reflection_property_new(dbklass); 129 GType mtype = 130 midgard_reflection_property_get_midgard_type(mrp, pname); 131 132 if(mtype == MGD_TYPE_TIMESTAMP) { 133 134 php_midgard_datetime_from_string( 135 g_value_get_string(gvalue), zvalue); 136 return TRUE; 137 } 138 } 139 */ 140 141 /* Generic GValue */ 103 142 switch (G_TYPE_FUNDAMENTAL(G_VALUE_TYPE(gvalue))) { 104 143 … … 147 186 148 187 case G_TYPE_OBJECT: 149 188 150 189 gobject_property = g_value_get_object(gvalue); 151 190 … … 200 239 arr_val = g_value_array_get_nth(array, i); 201 240 MAKE_STD_ZVAL(zarr_val); 202 php_midgard_gvalue2zval(arr_val, zarr_val); 241 php_midgard_gvalue2zval(arr_val, zarr_val, 242 dbklass, pname); 203 243 add_index_zval(zvalue, i, zarr_val); 204 244 } … … 256 296 (const gchar *) _classname, 257 297 NULL); 298 299 guint k; 300 for ( k = 0; k < 5; k++) { 301 midgard_object_new( 302 mgd_handle(), 303 "midgard_article", 304 NULL); 305 g_warning("K %d", k); 306 } 307 258 308 } else { 259 309 … … 297 347 g_object_get_property(G_OBJECT(gobject), Z_STRVAL_P(prop), &pval); 298 348 MAKE_STD_ZVAL(_retval); 299 php_midgard_gvalue2zval(&pval, _retval); 349 php_midgard_gvalue2zval(&pval, _retval, 350 MIDGARD_DBOBJECT_GET_CLASS(gobject), 351 (const gchar *) Z_STRVAL_P(prop)); 300 352 g_value_unset(&pval); 353 354 if(pspec->value_type == MGD_TYPE_TIMESTAMP) 355 g_warning("IS DATE"); 301 356 302 357 } else { … … 332 387 if(pspec) { 333 388 334 GValue *gvalue = php_midgard_zval2gvalue(value); 389 GValue *gvalue = 390 php_midgard_zval2gvalue(value); 335 391 g_object_set_property(gobject, Z_STRVAL_P(prop), gvalue); 336 392 std_hnd->write_property(zobject, prop, value TSRMLS_CC); … … 472 528 473 529 MAKE_STD_ZVAL(tmp); 474 php_midgard_gvalue2zval(&pval, tmp); 530 php_midgard_gvalue2zval(&pval, tmp, 531 MIDGARD_DBOBJECT_GET_CLASS(gobject), 532 props[i]->name); 475 533 zend_hash_update(php_gobject->zo.properties, 476 534 props[i]->name, strlen(props[i]->name)+1, … … 629 687 630 688 return rce; 689 } 690 691 /* DATETIME OBJECT */ 692 693 static zval ***__copy_args(zval *args) 694 { 695 zval ***params = NULL; 696 guint i; 697 guint argc = 0; 698 699 if(args != NULL) { 700 701 argc = zend_hash_num_elements(Z_ARRVAL_P(args)); 702 params = (zval ***)emalloc(argc * sizeof(zval **)); 703 zend_hash_internal_pointer_reset(Z_ARRVAL_P(args)); 704 705 for(i = 0; i < argc; i++) { 706 707 zend_hash_get_current_data(Z_ARRVAL_P(args), (void **)¶ms[i]); 708 zend_hash_move_forward(Z_ARRVAL_P(args)); 709 } 710 711 return params; 712 } 713 714 return NULL; 715 } 716 717 static void php_midgard_datetime_from_string(const gchar *date, zval *zvalue) 718 { 719 /* DateTimeZone object */ 720 zend_class_entry *dtz_ce = 721 php_midgard_get_baseclass_ptr_by_name("DateTimeZone"); 722 723 zval *dtz_params; 724 MAKE_STD_ZVAL(dtz_params); 725 array_init(dtz_params); 726 /* Initialize object for UTC timezone */ 727 add_index_string(dtz_params, 0, "UTC", 0); 728 729 zval *dtz_object; 730 MAKE_STD_ZVAL(dtz_object); 731 object_init_ex(dtz_object, dtz_ce); 732 zval *dtz_constructor; 733 MAKE_STD_ZVAL(dtz_constructor); 734 ZVAL_STRING(dtz_constructor, "__construct", 0); 735 736 /* Copy constructor arguments */ 737 zval ***args = __copy_args(dtz_params); 738 739 zval *retval = NULL; 740 int cld = call_user_function_ex(NULL, &dtz_object, dtz_constructor, 741 &retval, 1, args, 0, NULL TSRMLS_CC); 742 efree(args); 743 744 /* DateTime object */ 745 zend_class_entry *dt_ce = 746 php_midgard_get_baseclass_ptr_by_name("DateTime"); 747 748 zval *dt_params; 749 MAKE_STD_ZVAL(dt_params); 750 array_init(dt_params); 751 /* Initialize object for given time string and timezone*/ 752 if(date == NULL) date = "now"; 753 add_index_string(dt_params, 0, (gchar *)date, 1); 754 add_index_zval(dt_params, 1, dtz_object); 755 756 object_init_ex(zvalue, dt_ce); 757 zval *dt_constructor; 758 MAKE_STD_ZVAL(dt_constructor); 759 ZVAL_STRING(dt_constructor, "__construct", 0); 760 761 /* Copy constructor arguments */ 762 args = __copy_args(dt_params); 763 764 cld = call_user_function_ex(NULL, &zvalue, dt_constructor, 765 &retval, 2, args, 0, NULL TSRMLS_CC); 766 efree(args); 767 768 return; 769 } 770 771 static const gchar *php_midgard_string_from_datetime(zval *zvalue) 772 { 773 if(Z_TYPE_P(zvalue) != IS_OBJECT) { 774 775 g_warning("Can not format ISO datetime string. Value is not an object"); 776 return NULL; 777 } 778 779 /* Create params array and format ISO8601 compatible string */ 780 zval *dt_params; 781 MAKE_STD_ZVAL(dt_params); 782 array_init(dt_params); 783 add_index_string(dt_params, 0, (gchar *)"DateTime::ISO8601", 0); 784 785 zval *f_format; 786 MAKE_STD_ZVAL(f_format); 787 ZVAL_STRING(f_format, "format", 0); 788 789 /* Copy function arguments */ 790 zval ***args = __copy_args(dt_params); 791 792 /* TSRMSLS_FETCH(); */ /* Should be called here (required for CG macro ) */ 793 794 zval *retval; 795 call_user_function_ex(NULL, &zvalue, f_format, 796 &retval, 1, args, 1, NULL TSRMLS_CC); 797 efree(args); 798 799 g_warning("STRV %s", Z_STRVAL_P(retval)); 800 return (const gchar *)Z_STRVAL_P(retval); 631 801 } 632 802 trunk/midgard/apis/php4/php_midgard_object_parameter.c
r10887 r11177 57 57 domain, name); 58 58 if(gvalue != NULL) 59 php_midgard_gvalue2zval((GValue *)gvalue, return_value); 59 php_midgard_gvalue2zval((GValue *)gvalue, 60 return_value, 61 NULL, NULL); 60 62 else 61 63 RETURN_NULL(); trunk/midgard/apis/php4/query_builder.c
r10951 r11177 207 207 php_midgard_gobject_new_with_gobject(zobject, *ce, objects[i], TRUE); 208 208 zend_hash_next_index_insert( 209 HASH_OF(return_value), &zobject, sizeof(zval *), NULL); 209 HASH_OF(return_value), &zobject, sizeof(zval *), NULL); 210 210 } 211 211
