cvs: pecl /dbdo dbdo.c dbdo_object.c
| From: | Alan Knowles | Date: | Wed, 06 Apr 2005 15:31:47 +0000 |
| Subject: | cvs: pecl /dbdo dbdo.c dbdo_object.c | ||
| Groups: | php.pecl.cvs | ||
| Request: | Send a blank email to pecl-cvs+get-2934@lists.php.net to get a copy of this message | ||
alan_k Wed Apr 6 11:31:47 2005 EDT
Modified files:
/pecl/dbdo dbdo.c dbdo_object.c
Log:
fix segfaults on insert, still need to sort out memory leaks.
http://cvs.php.net/diff.php/pecl/dbdo/dbdo.c?r1=1.82&r2=1.83&ty=u Index: pecl/dbdo/dbdo.c diff -u pecl/dbdo/dbdo.c:1.82 pecl/dbdo/dbdo.c:1.83 --- pecl/dbdo/dbdo.c:1.82 Tue Apr 5 00:25:45 2005 +++ pecl/dbdo/dbdo.c Wed Apr 6 11:31:45 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbdo.c,v 1.82 2005/04/05 04:25:45 alan_k Exp $ */ +/* $Id: dbdo.c,v 1.83 2005/04/06 15:31:45 alan_k Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -417,19 +417,18 @@ list_entry *le, le_new; - zend_hash_init(&dbdo_class_entry_ce->constants_table, 0, NULL, NULL, 1); + zend_hash_init(&dbdo_class_entry_ce->constants_table, 0, NULL, NULL, 1); - DBDO_ADD_CONSTANT_LONG("OBJECTS", 0); - DBDO_ADD_CONSTANT_LONG("KEY_VALUE", 1); - DBDO_ADD_CONSTANT_LONG("BUILD", 1); - DBDO_ADD_CONSTANT_LONG("VALUE", 3); - DBDO_ADD_CONSTANT_LONG("SINGLE", 3); - - DBDO_ADD_CONSTANT_LONG("E_ALL", 3); - DBDO_ADD_CONSTANT_LONG("E_FULL", 63); - + DBDO_ADD_CONSTANT_LONG("OBJECTS", 0); + DBDO_ADD_CONSTANT_LONG("KEY_VALUE", 1); + DBDO_ADD_CONSTANT_LONG("BUILD", 1); + DBDO_ADD_CONSTANT_LONG("VALUE", 3); + DBDO_ADD_CONSTANT_LONG("SINGLE", 3); + DBDO_ADD_CONSTANT_LONG("E_ALL", 3); + DBDO_ADD_CONSTANT_LONG("E_FULL", 63); + - /* make sure we are connected on each request */ + /* make sure we are connected on each request */ plen = spprintf(&hashkey,0,"DBDO::client"); if (SUCCESS == zend_hash_find(&EG(persistent_list), hashkey, plen+1, (void*)&le)) { @@ -584,7 +583,7 @@ GdaProviderInfo *info; php_info_print_table_start(); php_info_print_table_header(2, "DBDO support", "enabled"); - php_info_print_table_row(2, "CVS id", "$Id: dbdo.c,v 1.82 2005/04/05 04:25:45 alan_k Exp $"); + php_info_print_table_row(2, "CVS id", "$Id: dbdo.c,v 1.83 2005/04/06 15:31:45 alan_k Exp $"); prov_list = gda_config_get_provider_list (); @@ -1013,7 +1012,7 @@ efree(classname); /* now instantate it!! */ object_init_ex(return_value, *ce); - zend_objects_store_add_ref(return_value); + zend_objects_store_add_ref(return_value TSRMLS_CC); /* call the constructor with dsn & tablename */ if (zend_hash_exists(&Z_OBJCE_P(return_value)->function_table, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME))) @@ -1206,10 +1205,10 @@ gda_value_set_from_string(gdav_tmp, search_key, dbdo_value_type_from_column(obj, obj->table->sequenceColumn)); - sql_str = dbdo_value_to_sql(gdav_tmp); + sql_str = (char *) gda_connection_value_to_sql_string (obj->con, gdav_tmp); smart_str_appends(&cmd, sql_str); - efree(sql_str); + g_free(sql_str); } else { GdaValue *gdav_tmp; @@ -1235,9 +1234,9 @@ tmpstr = estrdup(search_value); gda_value_set_from_string(gdav_tmp, (const gchar*) tmpstr, vtype); - tmpstr = dbdo_value_to_sql(gdav_tmp); + tmpstr = (char *) gda_connection_value_to_sql_string (obj->con, gdav_tmp); smart_str_appends(&cmd, tmpstr); - efree(tmpstr); + g_free(tmpstr); } smart_str_0(&cmd); DBDO_DEBUG(1,"QUERY:\n%s\n",cmd.c); @@ -1274,7 +1273,7 @@ } dbdo_fetch_into_properties(object TSRMLS_CC); - zend_objects_store_add_ref(object); + zend_objects_store_add_ref(object TSRMLS_CC); /* g_print("returning %d",rows); */ RETURN_LONG(rows); @@ -1634,7 +1633,7 @@ value = (GdaValue *) gda_row_get_value (row, column_id); - ALLOC_ZVAL(znew_value); + MAKE_STD_ZVAL(znew_value); ZVAL_EMPTY_STRING(znew_value); dbdo_value_to_zval(value, znew_value TSRMLS_CC); @@ -1642,9 +1641,9 @@ zval_add_ref(&znew_value); zend_update_property(Z_OBJCE_P(object), object, title, strlen(title), znew_value TSRMLS_CC); - + efree(title); - zval_dtor(znew_value); + } void @@ -1713,7 +1712,7 @@ } dbdo_fetch_into_properties(object TSRMLS_CC); - zend_objects_store_add_ref(object); + zend_objects_store_add_ref(object TSRMLS_CC); RETURN_TRUE; @@ -2211,7 +2210,7 @@ { zval *object = getThis(); zval *zvalue,*ztitle, value_copy; - int ret_int = 0; + long ret_int = 0; char **result_cols; GdaValue **result_values; @@ -2268,7 +2267,7 @@ result_cols = emalloc(sizeof(char *) * rows); result_values = emalloc(sizeof(GdaValue *) * rows); - + for (row_id = 0; row_id < rows;row_id++) { gchar *colname; @@ -2288,7 +2287,7 @@ } - ALLOC_ZVAL(ztitle); + MAKE_STD_ZVAL(ztitle); ZVAL_STRING(ztitle, colname, 1); /* insert from selected row ? */ @@ -2309,7 +2308,7 @@ started = 1; } - + if (!started) { zend_throw_exception(dbdo_class_entry_exception_ce , "DBDO::insert No data found to assign to columns", 0 TSRMLS_CC); @@ -2317,7 +2316,7 @@ return; } - + DBDO_DEBUG0(16,"DONE LEFT:"); smart_str_appends(&cmd, " ) VALUES ( "); @@ -2340,35 +2339,34 @@ if (!skippedseq && !strcmp(colname,obj->table->sequenceColumn)) { skippedseq = 1; - zval_dtor(ztitle); - FREE_ZVAL(ztitle); + continue; } - + /* if (!std_object_handlers.has_property(object, ztitle, 0 TSRMLS_CC)) { zval_dtor(ztitle); FREE_ZVAL(ztitle); continue; } - - zvalue = std_object_handlers.read_property(object, ztitle, 0 TSRMLS_CC); + */ + zvalue = zend_read_property(Z_OBJCE_P(object), object, colname, strlen(colname), 1 TSRMLS_CC); + if (!zvalue) { + continue; + } + + /* test that we can set it as a gdavalue (eg. it's the correct type ) */ - - value = dbdo_object_value_from_zval(obj, colname, zvalue TSRMLS_CC); + value = dbdo_object_value_from_zval(obj, colname, zvalue TSRMLS_CC); + if (!value) { - - zval_dtor(ztitle); - FREE_ZVAL(ztitle); zval_dtor(zvalue); smart_str_free(&cmd); return; } /* perhaps we should copy here.. */ - - zval_dtor(ztitle); - FREE_ZVAL(ztitle); + /* zval_dtor(zvalue); */ DBDO_DEBUG0(16,"Succeeded!"); @@ -2376,18 +2374,19 @@ smart_str_appends(&cmd, " , "); } /* TODO: -- use prepare /execute !!! */ - tmp_str2 = dbdo_value_to_sql(value); + tmp_str2 = (char *) gda_connection_value_to_sql_string (obj->con, value); smart_str_appends(&cmd, tmp_str2); - efree(tmp_str2); + g_free(tmp_str2); result_values[row_id] = value; started = 1; } + - + smart_str_appends(&cmd, " )"); smart_str_0(&cmd); DBDO_DEBUG(1,"QUERY:\n%s\n", cmd.c); @@ -2407,9 +2406,8 @@ /* TODO: implement a wrapper around get_last_insert_id() */ ret_str = gda_connection_get_last_insert_id(obj->con, dm); DBDO_DEBUG(2,"returning %s", ret_str); - ret_int = atoi(ret_str); - /* g_free(ret_str); */ - + ret_int = atol(ret_str); + g_free(ret_str); @@ -2436,7 +2434,7 @@ obj->result = gda_data_model_array_new (no_cols+1); gda_data_model_set_column_title (obj->result, 0,obj->table->sequenceColumn); - value_list = g_list_append (value_list, gda_value_new_from_string (ret_str, GDA_VALUE_TYPE_INTEGER)); + value_list = g_list_append (value_list, gda_value_new_integer ((gint) ret_int)); no_cols = 1; @@ -2471,9 +2469,9 @@ { zval *znew_value=NULL; - ALLOC_ZVAL(znew_value); + MAKE_STD_ZVAL(znew_value); ZVAL_LONG(znew_value,ret_int); - zval_add_ref(&znew_value); + //zval_add_ref(&znew_value); zend_update_property(Z_OBJCE_P(object), object, obj->table->sequenceColumn, strlen(obj->table->sequenceColumn), znew_value TSRMLS_CC); @@ -2483,7 +2481,7 @@ } - g_free(ret_str); + efree(result_cols); efree(result_values); RETURN_LONG(ret_int); @@ -2600,8 +2598,12 @@ smart_str_appends(&cmd, colname); smart_str_appends(&cmd, "="); + /* FIXME = use zend_read_property() */ zvalue = std_object_handlers.read_property(object, ztitle, 0 TSRMLS_CC); + /* FIXME - compare fetched and new.. */ + + /* create a GdaValue with type matching the column do a dbdo_gda_to_sql on it. @@ -2616,10 +2618,10 @@ gda_value_set_from_string(gdav, Z_STRVAL_P(zvalue), dbdo_value_type_from_column(obj, colname)); g_free(colname); - sql_str = dbdo_value_to_sql(gdav); + sql_str = (char *) gda_connection_value_to_sql_string (obj->con, gdav); smart_str_appends(&cmd, sql_str); - efree(sql_str); + g_free(sql_str); /* TODO: quoting colname. */ zval_dtor(ztitle); FREE_ZVAL(ztitle); @@ -2656,16 +2658,16 @@ gda_data_model_get_column_position(obj->result, col_name), obj->row_id); - sql_str = dbdo_value_to_sql(r_gvalue); + sql_str = (char *) gda_connection_value_to_sql_string (obj->con,r_gvalue); if (found_key) { smart_str_appends(&cmd, " AND "); } smart_str_appends(&cmd, "("); - smart_str_appends(&cmd, col_name); + smart_str_appends(&cmd, col_name); smart_str_appends(&cmd, " = "); smart_str_appends(&cmd, sql_str); smart_str_appends(&cmd, ")"); - efree(sql_str); + g_free(sql_str); found_key = 1; continue; } @@ -2684,7 +2686,7 @@ gda_value_set_from_string(gdav, Z_STRVAL_P(zvalue), dbdo_value_type_from_column(obj, col_name)); - sql_str = dbdo_value_to_sql(gdav); + sql_str = (char *) gda_connection_value_to_sql_string (obj->con, gdav); if (found_key) { smart_str_appends(&cmd, " AND "); } @@ -2694,7 +2696,7 @@ smart_str_appends(&cmd, sql_str); smart_str_appends(&cmd, ")"); - efree(sql_str); + g_free(sql_str); found_key = 1; } FREE_ZVAL(ztitle); @@ -2766,10 +2768,10 @@ gda_value_set_from_string(gdav, Z_STRVAL_P(zvalue), dbdo_value_type_from_column(obj, colname)); g_free(colname); - sql_str = dbdo_value_to_sql(gdav); + sql_str = (char *) gda_connection_value_to_sql_string (obj->con, gdav); smart_str_appends(&cmd, sql_str); - efree(sql_str); + g_free(sql_str); /* TODO: quoting colname. */ zval_dtor(ztitle); FREE_ZVAL(ztitle); @@ -3333,10 +3335,10 @@ gda_value_set_from_string(gdav, Z_STRVAL_P(zvalue), dbdo_value_type_from_column(obj, obj->table->sequenceColumn)); - sql_str = dbdo_value_to_sql(gdav); + sql_str = (char *) gda_connection_value_to_sql_string (obj->con, gdav); smart_str_appends(&cmd, sql_str); - efree(sql_str); + g_free(sql_str); /* TODO: free the gvalue */ } else { GdaValue *r_gvalue; @@ -3357,9 +3359,9 @@ r_gvalue = (GdaValue *) gda_data_model_get_value_at ( obj->result, col, obj->row_id); - sql_str = dbdo_value_to_sql(r_gvalue); + sql_str = (char *) gda_connection_value_to_sql_string (obj->con, r_gvalue); smart_str_appends(&cmd, sql_str); - efree(sql_str); + g_free(sql_str); /* TODO: free the gvalue */ } http://cvs.php.net/diff.php/pecl/dbdo/dbdo_object.c?r1=1.21&r2=1.22&ty=u Index: pecl/dbdo/dbdo_object.c diff -u pecl/dbdo/dbdo_object.c:1.21 pecl/dbdo/dbdo_object.c:1.22 --- pecl/dbdo/dbdo_object.c:1.21 Tue Apr 5 00:19:59 2005 +++ pecl/dbdo/dbdo_object.c Wed Apr 6 11:31:46 2005 @@ -400,13 +400,13 @@ case GDA_VALUE_TYPE_DATE: case GDA_VALUE_TYPE_TIMESTAMP: ret = g_new0 (GdaValue, 1); - if (from->type != IS_STRING) { - value_copy = *from; - zval_copy_ctor(&value_copy); - from = &value_copy; - } - convert_to_string(from); - gda_value_set_from_string(ret, Z_STRVAL_P(from),type); + + value_copy = *from; + zval_copy_ctor(&value_copy); + + + convert_to_string(&value_copy); + gda_value_set_from_string(ret, Z_STRVAL_P(&value_copy),type); /* find a string */ if (type == GDA_VALUE_TYPE_STRING) { @@ -416,10 +416,7 @@ row = (GdaRow *) gda_data_model_get_row (obj->table->schema, row_id); col = gda_data_model_get_column_position(obj->table->schema, "Size"); fieldsize = gda_value_get_integer((GdaValue *) gda_row_get_value (row, col)); - if (Z_STRLEN_P(from) > fieldsize) { - if (from == &value_copy) { - zval_dtor(from); - } + if (Z_STRLEN_P(&value_copy) > fieldsize) { zend_throw_exception_ex( dbdo_class_entry_exception_ce , 0 TSRMLS_CC, "Column %s is not large enough for The value you assigned", @@ -429,12 +426,12 @@ } - if (from != &value_copy) { - zval_dtor(from); - } + + + break; case GDA_VALUE_TYPE_SINGLE: - ret = g_new0 (GdaValue, 1); + ret = g_new0 (GdaValue, 1); convert_to_double(from); gda_value_set_single(ret, (gfloat)Z_DVAL_P(from)); break;
http://cvs.php.net/diff.php/pecl/dbdo/dbdo.c?r1=1.82&r2=1.83&ty=u Index: pecl/dbdo/dbdo.c diff -u pecl/dbdo/dbdo.c:1.82 pecl/dbdo/dbdo.c:1.83 --- pecl/dbdo/dbdo.c:1.82 Tue Apr 5 00:25:45 2005 +++ pecl/dbdo/dbdo.c Wed Apr 6 11:31:45 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbdo.c,v 1.82 2005/04/05 04:25:45 alan_k Exp $ */ +/* $Id: dbdo.c,v 1.83 2005/04/06 15:31:45 alan_k Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -417,19 +417,18 @@ list_entry *le, le_new; - zend_hash_init(&dbdo_class_entry_ce->constants_table, 0, NULL, NULL, 1); + zend_hash_init(&dbdo_class_entry_ce->constants_table, 0, NULL, NULL, 1); - DBDO_ADD_CONSTANT_LONG("OBJECTS", 0); - DBDO_ADD_CONSTANT_LONG("KEY_VALUE", 1); - DBDO_ADD_CONSTANT_LONG("BUILD", 1); - DBDO_ADD_CONSTANT_LONG("VALUE", 3); - DBDO_ADD_CONSTANT_LONG("SINGLE", 3); - - DBDO_ADD_CONSTANT_LONG("E_ALL", 3); - DBDO_ADD_CONSTANT_LONG("E_FULL", 63); - + DBDO_ADD_CONSTANT_LONG("OBJECTS", 0); + DBDO_ADD_CONSTANT_LONG("KEY_VALUE", 1); + DBDO_ADD_CONSTANT_LONG("BUILD", 1); + DBDO_ADD_CONSTANT_LONG("VALUE", 3); + DBDO_ADD_CONSTANT_LONG("SINGLE", 3); + DBDO_ADD_CONSTANT_LONG("E_ALL", 3); + DBDO_ADD_CONSTANT_LONG("E_FULL", 63); + - /* make sure we are connected on each request */ + /* make sure we are connected on each request */ plen = spprintf(&hashkey,0,"DBDO::client"); if (SUCCESS == zend_hash_find(&EG(persistent_list), hashkey, plen+1, (void*)&le)) { @@ -584,7 +583,7 @@ GdaProviderInfo *info; php_info_print_table_start(); php_info_print_table_header(2, "DBDO support", "enabled"); - php_info_print_table_row(2, "CVS id", "$Id: dbdo.c,v 1.82 2005/04/05 04:25:45 alan_k Exp $"); + php_info_print_table_row(2, "CVS id", "$Id: dbdo.c,v 1.83 2005/04/06 15:31:45 alan_k Exp $"); prov_list = gda_config_get_provider_list (); @@ -1013,7 +1012,7 @@ efree(classname); /* now instantate it!! */ object_init_ex(return_value, *ce); - zend_objects_store_add_ref(return_value); + zend_objects_store_add_ref(return_value TSRMLS_CC); /* call the constructor with dsn & tablename */ if (zend_hash_exists(&Z_OBJCE_P(return_value)->function_table, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME))) @@ -1206,10 +1205,10 @@ gda_value_set_from_string(gdav_tmp, search_key, dbdo_value_type_from_column(obj, obj->table->sequenceColumn)); - sql_str = dbdo_value_to_sql(gdav_tmp); + sql_str = (char *) gda_connection_value_to_sql_string (obj->con, gdav_tmp); smart_str_appends(&cmd, sql_str); - efree(sql_str); + g_free(sql_str); } else { GdaValue *gdav_tmp; @@ -1235,9 +1234,9 @@ tmpstr = estrdup(search_value); gda_value_set_from_string(gdav_tmp, (const gchar*) tmpstr, vtype); - tmpstr = dbdo_value_to_sql(gdav_tmp); + tmpstr = (char *) gda_connection_value_to_sql_string (obj->con, gdav_tmp); smart_str_appends(&cmd, tmpstr); - efree(tmpstr); + g_free(tmpstr); } smart_str_0(&cmd); DBDO_DEBUG(1,"QUERY:\n%s\n",cmd.c); @@ -1274,7 +1273,7 @@ } dbdo_fetch_into_properties(object TSRMLS_CC); - zend_objects_store_add_ref(object); + zend_objects_store_add_ref(object TSRMLS_CC); /* g_print("returning %d",rows); */ RETURN_LONG(rows); @@ -1634,7 +1633,7 @@ value = (GdaValue *) gda_row_get_value (row, column_id); - ALLOC_ZVAL(znew_value); + MAKE_STD_ZVAL(znew_value); ZVAL_EMPTY_STRING(znew_value); dbdo_value_to_zval(value, znew_value TSRMLS_CC); @@ -1642,9 +1641,9 @@ zval_add_ref(&znew_value); zend_update_property(Z_OBJCE_P(object), object, title, strlen(title), znew_value TSRMLS_CC); - + efree(title); - zval_dtor(znew_value); + } void @@ -1713,7 +1712,7 @@ } dbdo_fetch_into_properties(object TSRMLS_CC); - zend_objects_store_add_ref(object); + zend_objects_store_add_ref(object TSRMLS_CC); RETURN_TRUE; @@ -2211,7 +2210,7 @@ { zval *object = getThis(); zval *zvalue,*ztitle, value_copy; - int ret_int = 0; + long ret_int = 0; char **result_cols; GdaValue **result_values; @@ -2268,7 +2267,7 @@ result_cols = emalloc(sizeof(char *) * rows); result_values = emalloc(sizeof(GdaValue *) * rows); - + for (row_id = 0; row_id < rows;row_id++) { gchar *colname; @@ -2288,7 +2287,7 @@ } - ALLOC_ZVAL(ztitle); + MAKE_STD_ZVAL(ztitle); ZVAL_STRING(ztitle, colname, 1); /* insert from selected row ? */ @@ -2309,7 +2308,7 @@ started = 1; } - + if (!started) { zend_throw_exception(dbdo_class_entry_exception_ce , "DBDO::insert No data found to assign to columns", 0 TSRMLS_CC); @@ -2317,7 +2316,7 @@ return; } - + DBDO_DEBUG0(16,"DONE LEFT:"); smart_str_appends(&cmd, " ) VALUES ( "); @@ -2340,35 +2339,34 @@ if (!skippedseq && !strcmp(colname,obj->table->sequenceColumn)) { skippedseq = 1; - zval_dtor(ztitle); - FREE_ZVAL(ztitle); + continue; } - + /* if (!std_object_handlers.has_property(object, ztitle, 0 TSRMLS_CC)) { zval_dtor(ztitle); FREE_ZVAL(ztitle); continue; } - - zvalue = std_object_handlers.read_property(object, ztitle, 0 TSRMLS_CC); + */ + zvalue = zend_read_property(Z_OBJCE_P(object), object, colname, strlen(colname), 1 TSRMLS_CC); + if (!zvalue) { + continue; + } + + /* test that we can set it as a gdavalue (eg. it's the correct type ) */ - - value = dbdo_object_value_from_zval(obj, colname, zvalue TSRMLS_CC); + value = dbdo_object_value_from_zval(obj, colname, zvalue TSRMLS_CC); + if (!value) { - - zval_dtor(ztitle); - FREE_ZVAL(ztitle); zval_dtor(zvalue); smart_str_free(&cmd); return; } /* perhaps we should copy here.. */ - - zval_dtor(ztitle); - FREE_ZVAL(ztitle); + /* zval_dtor(zvalue); */ DBDO_DEBUG0(16,"Succeeded!"); @@ -2376,18 +2374,19 @@ smart_str_appends(&cmd, " , "); } /* TODO: -- use prepare /execute !!! */ - tmp_str2 = dbdo_value_to_sql(value); + tmp_str2 = (char *) gda_connection_value_to_sql_string (obj->con, value); smart_str_appends(&cmd, tmp_str2); - efree(tmp_str2); + g_free(tmp_str2); result_values[row_id] = value; started = 1; } + - + smart_str_appends(&cmd, " )"); smart_str_0(&cmd); DBDO_DEBUG(1,"QUERY:\n%s\n", cmd.c); @@ -2407,9 +2406,8 @@ /* TODO: implement a wrapper around get_last_insert_id() */ ret_str = gda_connection_get_last_insert_id(obj->con, dm); DBDO_DEBUG(2,"returning %s", ret_str); - ret_int = atoi(ret_str); - /* g_free(ret_str); */ - + ret_int = atol(ret_str); + g_free(ret_str); @@ -2436,7 +2434,7 @@ obj->result = gda_data_model_array_new (no_cols+1); gda_data_model_set_column_title (obj->result, 0,obj->table->sequenceColumn); - value_list = g_list_append (value_list, gda_value_new_from_string (ret_str, GDA_VALUE_TYPE_INTEGER)); + value_list = g_list_append (value_list, gda_value_new_integer ((gint) ret_int)); no_cols = 1; @@ -2471,9 +2469,9 @@ { zval *znew_value=NULL; - ALLOC_ZVAL(znew_value); + MAKE_STD_ZVAL(znew_value); ZVAL_LONG(znew_value,ret_int); - zval_add_ref(&znew_value); + //zval_add_ref(&znew_value); zend_update_property(Z_OBJCE_P(object), object, obj->table->sequenceColumn, strlen(obj->table->sequenceColumn), znew_value TSRMLS_CC); @@ -2483,7 +2481,7 @@ } - g_free(ret_str); + efree(result_cols); efree(result_values); RETURN_LONG(ret_int); @@ -2600,8 +2598,12 @@ smart_str_appends(&cmd, colname); smart_str_appends(&cmd, "="); + /* FIXME = use zend_read_property() */ zvalue = std_object_handlers.read_property(object, ztitle, 0 TSRMLS_CC); + /* FIXME - compare fetched and new.. */ + + /* create a GdaValue with type matching the column do a dbdo_gda_to_sql on it. @@ -2616,10 +2618,10 @@ gda_value_set_from_string(gdav, Z_STRVAL_P(zvalue), dbdo_value_type_from_column(obj, colname)); g_free(colname); - sql_str = dbdo_value_to_sql(gdav); + sql_str = (char *) gda_connection_value_to_sql_string (obj->con, gdav); smart_str_appends(&cmd, sql_str); - efree(sql_str); + g_free(sql_str); /* TODO: quoting colname. */ zval_dtor(ztitle); FREE_ZVAL(ztitle); @@ -2656,16 +2658,16 @@ gda_data_model_get_column_position(obj->result, col_name), obj->row_id); - sql_str = dbdo_value_to_sql(r_gvalue); + sql_str = (char *) gda_connection_value_to_sql_string (obj->con,r_gvalue); if (found_key) { smart_str_appends(&cmd, " AND "); } smart_str_appends(&cmd, "("); - smart_str_appends(&cmd, col_name); + smart_str_appends(&cmd, col_name); smart_str_appends(&cmd, " = "); smart_str_appends(&cmd, sql_str); smart_str_appends(&cmd, ")"); - efree(sql_str); + g_free(sql_str); found_key = 1; continue; } @@ -2684,7 +2686,7 @@ gda_value_set_from_string(gdav, Z_STRVAL_P(zvalue), dbdo_value_type_from_column(obj, col_name)); - sql_str = dbdo_value_to_sql(gdav); + sql_str = (char *) gda_connection_value_to_sql_string (obj->con, gdav); if (found_key) { smart_str_appends(&cmd, " AND "); } @@ -2694,7 +2696,7 @@ smart_str_appends(&cmd, sql_str); smart_str_appends(&cmd, ")"); - efree(sql_str); + g_free(sql_str); found_key = 1; } FREE_ZVAL(ztitle); @@ -2766,10 +2768,10 @@ gda_value_set_from_string(gdav, Z_STRVAL_P(zvalue), dbdo_value_type_from_column(obj, colname)); g_free(colname); - sql_str = dbdo_value_to_sql(gdav); + sql_str = (char *) gda_connection_value_to_sql_string (obj->con, gdav); smart_str_appends(&cmd, sql_str); - efree(sql_str); + g_free(sql_str); /* TODO: quoting colname. */ zval_dtor(ztitle); FREE_ZVAL(ztitle); @@ -3333,10 +3335,10 @@ gda_value_set_from_string(gdav, Z_STRVAL_P(zvalue), dbdo_value_type_from_column(obj, obj->table->sequenceColumn)); - sql_str = dbdo_value_to_sql(gdav); + sql_str = (char *) gda_connection_value_to_sql_string (obj->con, gdav); smart_str_appends(&cmd, sql_str); - efree(sql_str); + g_free(sql_str); /* TODO: free the gvalue */ } else { GdaValue *r_gvalue; @@ -3357,9 +3359,9 @@ r_gvalue = (GdaValue *) gda_data_model_get_value_at ( obj->result, col, obj->row_id); - sql_str = dbdo_value_to_sql(r_gvalue); + sql_str = (char *) gda_connection_value_to_sql_string (obj->con, r_gvalue); smart_str_appends(&cmd, sql_str); - efree(sql_str); + g_free(sql_str); /* TODO: free the gvalue */ } http://cvs.php.net/diff.php/pecl/dbdo/dbdo_object.c?r1=1.21&r2=1.22&ty=u Index: pecl/dbdo/dbdo_object.c diff -u pecl/dbdo/dbdo_object.c:1.21 pecl/dbdo/dbdo_object.c:1.22 --- pecl/dbdo/dbdo_object.c:1.21 Tue Apr 5 00:19:59 2005 +++ pecl/dbdo/dbdo_object.c Wed Apr 6 11:31:46 2005 @@ -400,13 +400,13 @@ case GDA_VALUE_TYPE_DATE: case GDA_VALUE_TYPE_TIMESTAMP: ret = g_new0 (GdaValue, 1); - if (from->type != IS_STRING) { - value_copy = *from; - zval_copy_ctor(&value_copy); - from = &value_copy; - } - convert_to_string(from); - gda_value_set_from_string(ret, Z_STRVAL_P(from),type); + + value_copy = *from; + zval_copy_ctor(&value_copy); + + + convert_to_string(&value_copy); + gda_value_set_from_string(ret, Z_STRVAL_P(&value_copy),type); /* find a string */ if (type == GDA_VALUE_TYPE_STRING) { @@ -416,10 +416,7 @@ row = (GdaRow *) gda_data_model_get_row (obj->table->schema, row_id); col = gda_data_model_get_column_position(obj->table->schema, "Size"); fieldsize = gda_value_get_integer((GdaValue *) gda_row_get_value (row, col)); - if (Z_STRLEN_P(from) > fieldsize) { - if (from == &value_copy) { - zval_dtor(from); - } + if (Z_STRLEN_P(&value_copy) > fieldsize) { zend_throw_exception_ex( dbdo_class_entry_exception_ce , 0 TSRMLS_CC, "Column %s is not large enough for The value you assigned", @@ -429,12 +426,12 @@ } - if (from != &value_copy) { - zval_dtor(from); - } + + + break; case GDA_VALUE_TYPE_SINGLE: - ret = g_new0 (GdaValue, 1); + ret = g_new0 (GdaValue, 1); convert_to_double(from); gda_value_set_single(ret, (gfloat)Z_DVAL_P(from)); break;