[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pecl-cvs
Subject:    [PECL-CVS] cvs: pecl /dbdo dbdo.c php_dbdo.h  /dbdo/examples fetchAll.php valueGet.php
From:       "Alan Knowles" <alan_k () php ! net>
Date:       2004-11-27 16:40:59
Message-ID: cvsalan_k1101573659 () cvsserver
[Download RAW message or body]

alan_k		Sat Nov 27 11:40:59 2004 EDT

  Added files:                 
    /pecl/dbdo/examples	valueGet.php 

  Modified files:              
    /pecl/dbdo	dbdo.c php_dbdo.h 
    /pecl/dbdo/examples	fetchAll.php 
  Log:
  valueGet() now works, sorted out memory leaks on getters, although still need to \
simplify visable_hash to only store fetched values, not replicate zo.properties  


["alan_k-20041127114059.txt" (text/plain)]

http://cvs.php.net/diff.php/pecl/dbdo/dbdo.c?r1=1.38&r2=1.39&ty=u
Index: pecl/dbdo/dbdo.c
diff -u pecl/dbdo/dbdo.c:1.38 pecl/dbdo/dbdo.c:1.39
--- pecl/dbdo/dbdo.c:1.38	Sat Nov 27 07:00:30 2004
+++ pecl/dbdo/dbdo.c	Sat Nov 27 11:40:59 2004
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: dbdo.c,v 1.38 2004/11/27 12:00:30 alan_k Exp $ */
+/* $Id: dbdo.c,v 1.39 2004/11/27 16:40:59 alan_k Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -205,6 +205,7 @@
 	PHP_FE(dbdo_toArray,		NULL)
 	PHP_FE(dbdo_assignFrom,		NULL)
 	PHP_FE(dbdo_valueSet,		NULL)
+	PHP_FE(dbdo_valueGet,		NULL)
 
 	PHP_FE(dbdo_schema,		NULL)
  	PHP_FE(dbdo_saveDataSource,	NULL)
@@ -257,6 +258,7 @@
 	DBDO_ME_MAPPING(toArray, 	dbdo_toArray, NULL,0)
 	DBDO_ME_MAPPING(assignFrom, 	dbdo_assignFrom, NULL,0)
 	DBDO_ME_MAPPING(valueSet, 	dbdo_valueSet, NULL,0)
+	DBDO_ME_MAPPING(valueGet, 	dbdo_valueGet, NULL,0)
 	
 	DBDO_ME_MAPPING(schema, 	dbdo_schema, NULL,0)
 	DBDO_ME_MAPPING(saveDataSource, dbdo_saveDataSource, NULL, \
ZEND_ACC_STATIC|ZEND_ACC_PUBLIC) @@ -1188,9 +1190,9 @@
 		       
 		case 1: /* DBDO::KEY_VALUE */
 		{
-			zval *value_r;
-			char *string;
-			ulong            h;
+			zval 		*value_r;
+			char 		*string;
+			ulong		h;
 
 			
 			if (gda_data_model_get_n_columns(obj->result) != 2) {
@@ -1205,27 +1207,25 @@
 			array_init(return_value);
 			
 			for (r = 0; r < gda_data_model_get_n_rows (obj->result); r++) {
-				zval *value_r;
-				GdaValue *rvalue;
-				gchar *gstr;
+				zval 		*value_r;
+				GdaValue 	*rvalue;
+				gchar 		*gstr;
+				
 				value  = (GdaValue *) gda_data_model_get_value_at (obj->result, 0, r);
 				gstr = gda_value_stringify (value);
 				string = estrdup(gstr);
 				g_free(gstr);
 				h = zend_hash_func(string, strlen(string)+1);
-				
-				
 				rvalue  = (GdaValue *) gda_data_model_get_value_at (obj->result, 1, r);
 				
 				value_r = dbdo_value_to_zval(rvalue);
-				//zval_add_ref(&value_r);
 				gstr = gda_value_stringify(rvalue);
 				DBDO_DEBUG2(16,"got row: %s,%s",string, gstr);
-				g_free(gstr);
-				
+				g_free(gstr);	
 				zend_hash_quick_update(HASH_OF(return_value),  
 					string, strlen(string)+1, h, &value_r, sizeof(zval *), NULL);
-				
+				 
+			
 				efree(string); 
 			}
 			
@@ -1522,71 +1522,91 @@
 	return 0;
 }
 
+
+
+
+
 static 
 zval * 
 dbdo_property_read(zval *object, zval *member, int type TSRMLS_DC)
 {
 	zval           *return_value;
 	char		*name;
-	GdaRow   *row;
-	gint column_id;
-	GdaValue *value;
-	char *string;
-	char *title;
-	dbdo_object *obj = zend_object_store_get_object(object TSRMLS_CC);
-	
+	GdaRow		*row;
+	gint		column_id;
+	GdaValue	*value;
+	char		*string;
+	char		*title;
+	dbdo_object	*obj = zend_object_store_get_object(object TSRMLS_CC);
 	
 	/* if we have it stored return that! */
-	if (std_object_handlers.has_property(object, member, 0 TSRMLS_CC)) {
+	if (std_object_handlers.has_property(object, member, 0 TSRMLS_CC)
+		|| ((obj->result == NULL) || !G_IS_OBJECT(obj->result))
+		|| (obj->row_id >= gda_data_model_get_n_rows (obj->result))
+	  ) {
+		DBDO_DEBUG(16,"property_read(%s)  from properties.",Z_STRVAL_P(member));
 		return std_object_handlers.read_property(object, member, type TSRMLS_CC);
 	}
-	if ((obj->result == NULL) || !G_IS_OBJECT(obj->result)) {
-		return std_object_handlers.read_property(object, member, type TSRMLS_CC);
+	
+	if (!obj->visable_hash) {
+		ALLOC_HASHTABLE(obj->visable_hash); 
+		zend_hash_init(obj->visable_hash, 0, NULL, ZVAL_PTR_DTOR, 0);
+	} else {
+		zval **element, *use;
+		
+		if (zend_hash_find(obj->visable_hash, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, \
(void **) &element) == SUCCESS) { +			DBDO_DEBUG(16,"property_read(%s) from result \
cache.",Z_STRVAL_P(member)); +			use = *element;
+			return use;
+		}
 	}
-	/* fetch past end ! - do we really want to do this!!! ??? */
-	if (obj->row_id >= gda_data_model_get_n_rows (obj->result)) {
-		return std_object_handlers.read_property(object, member, type TSRMLS_CC);
-	} 
 	
-	ZVAL_NULL(return_value);	
+	
+	//ZVAL_NULL(return_value);	
 	name = Z_STRVAL_P(member);
 	
 	row = (GdaRow *) gda_data_model_get_row (obj->result, obj->row_id);
 	for (column_id = 0; column_id < gda_data_model_get_n_columns (obj->result); \
column_id++) {  zval *ret;
+		ulong h;
 		title  = (gchar *) gda_data_model_get_column_title (obj->result, column_id);
 		if (strcmp(name, title) != 0) {
 			continue;
 		}
 		value  = (GdaValue *) gda_row_get_value (row, column_id);
 		ret = dbdo_value_to_zval(value);
-		zval_add_ref(&ret);
-		*return_value = *ret;
-		zval_dtor(ret);
-		FREE_ZVAL(ret);
-		return  return_value;
+		ret->refcount = 1;
+		h = zend_hash_func(title, strlen(title)+1);
+		zend_hash_quick_update(obj->visable_hash, title, strlen(title)+1, h, &ret, \
sizeof(zval *), NULL); +		DBDO_DEBUG(16,"property_read(%s) Directly from result \
set.",Z_STRVAL_P(member)); +		return ret;
 	}
-	
+	DBDO_DEBUG(16,"property_read(%s)  fell back to  properties.",Z_STRVAL_P(member));
 	return std_object_handlers.read_property(object, member, type TSRMLS_CC);
 	
 
 }
 
+
+
+
+
+
 /* get all the properties.. (eg. used by print_r etc..) */
 static HashTable *
 dbdo_properties_get(zval *object TSRMLS_DC)
 {
 	zval 		*tmp;
-	zval           **data_ptr;
-	zval            *value,*ztitle;
-	zval            *newptr;
-	zval *rvalue; 
-	GdaValue 	*gdavalue;
-	gint column_id;
-	char *title;
-	char *string;
-	GdaRow   *row;
-	ulong            h;
+	zval		**data_ptr;
+	zval		*value,*ztitle;
+	zval		*newptr;
+	zval		*rvalue; 
+	GdaValue	*gdavalue;
+	gint 		column_id;
+	char 		*title;
+	char 		*string;
+	GdaRow   	*row;
+	ulong		h;
 
 	dbdo_object *obj = zend_object_store_get_object(object TSRMLS_CC);
 	char            *name;
@@ -1609,6 +1629,7 @@
 	
 	
 	/* g_print("copying existing hash?\n"); */
+	/* FIXME : visable hash should only be a represenation of the object now */
 	zend_hash_copy(obj->visable_hash,std_object_handlers.get_properties(object \
TSRMLS_CC), (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));  
 	
@@ -1632,10 +1653,10 @@
 		gdavalue  = (GdaValue *) gda_row_get_value (row, column_id);
 		
 		rvalue = dbdo_value_to_zval(gdavalue);
-		//zval_add_ref(&rvalue);
+		rvalue->refcount = 1;
 		h = zend_hash_func(title, strlen(title)+1);
 		zend_hash_quick_update(obj->visable_hash, title, strlen(title)+1, h, &rvalue, \
                sizeof(zval *), NULL);
-		//FREE_ZVAL(&rvalue);
+		
 	} 
 	
 	return obj->visable_hash;
@@ -3037,9 +3058,10 @@
 	dbdo_object	*obj = zend_object_store_get_object(object TSRMLS_CC);
 	GdaValue 	*test;
 	
-	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz", &col,&col_len, &value) \
== FAILURE) { +	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz", &col, \
&col_len, &value) == FAILURE) {  RETURN_FALSE;
 	}
+	
 	dbdo_schema_load(obj  TSRMLS_CC);
 	
 	row_id = dbdo_schema_get_col_row(obj,col);
@@ -3067,6 +3089,28 @@
 }
 
 	
+
+PHP_FUNCTION(dbdo_valueGet)
+{
+	zval 		*member;
+	zval 		*object = getThis(); 
+	zval 		*ret;
+	char 		*col;
+	int 		col_len, row_id;
+	
+	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &col, &col_len) == \
FAILURE) { +		RETURN_FALSE;
+	}
+	/* we get it again (as it's easier to sent to getproperty.. */
+	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &member) == FAILURE) {
+		RETURN_FALSE;
+	}
+	/* we have no idea what type (3rd arg means but we are sticking 1 in there */
+	ret = dbdo_property_read(object, member, 1 TSRMLS_CC);	
+	RETURN_ZVAL(ret, 1, 0);
+	 
+}
+
 	
 
 
http://cvs.php.net/diff.php/pecl/dbdo/php_dbdo.h?r1=1.17&r2=1.18&ty=u
Index: pecl/dbdo/php_dbdo.h
diff -u pecl/dbdo/php_dbdo.h:1.17 pecl/dbdo/php_dbdo.h:1.18
--- pecl/dbdo/php_dbdo.h:1.17	Sat Nov 27 06:45:41 2004
+++ pecl/dbdo/php_dbdo.h	Sat Nov 27 11:40:59 2004
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: php_dbdo.h,v 1.17 2004/11/27 11:45:41 alan_k Exp $ */
+/* $Id: php_dbdo.h,v 1.18 2004/11/27 16:40:59 alan_k Exp $ */
 
 #ifndef PHP_DBDO_H
 #define PHP_DBDO_H
@@ -161,7 +161,7 @@
 PHP_FUNCTION(dbdo_toArray);
 PHP_FUNCTION(dbdo_assignFrom);
 PHP_FUNCTION(dbdo_valueSet);
-
+PHP_FUNCTION(dbdo_valueGet);
 
 
 PHP_FUNCTION(dbdo_schema);
http://cvs.php.net/diff.php/pecl/dbdo/examples/fetchAll.php?r1=1.4&r2=1.5&ty=u
Index: pecl/dbdo/examples/fetchAll.php
diff -u pecl/dbdo/examples/fetchAll.php:1.4 pecl/dbdo/examples/fetchAll.php:1.5
--- pecl/dbdo/examples/fetchAll.php:1.4	Fri Nov 19 05:42:12 2004
+++ pecl/dbdo/examples/fetchAll.php	Sat Nov 27 11:40:59 2004
@@ -6,13 +6,10 @@
     dl('dbdo.' . PHP_SHLIB_SUFFIX);
 }
 
-function debug($v) {
-    echo "DEBUG: $v\n";
-}
-
+ 
 // set up source test to use database test..
 dbdo::saveDataSource("test","MySQL","DATABASE=test", "test database", "alan","");
-dbdo::debugLevel(1);
+dbdo::debugLevel(DBDO::E_FULL);
 
  
 
@@ -21,7 +18,7 @@
 $a = $x->fetchAll();
 
 print_r($a);
- 
+
 
 $x = new DBDO('test', 'test');
 $x->query();
@@ -52,10 +49,4 @@
 print_r($a);
 
 echo "DONE\n";
- 
-
-
-
-
-
-
+ 
\ No newline at end of file

http://cvs.php.net/co.php/pecl/dbdo/examples/valueGet.php?r=1.1&p=1
Index: pecl/dbdo/examples/valueGet.php
+++ pecl/dbdo/examples/valueGet.php
<?php


if (!extension_loaded('dbdo')) {
    dl('dbdo.' . PHP_SHLIB_SUFFIX);
}

 
// set up source test to use database test..
DBDO::saveDataSource("test","MySQL","DATABASE=test", "test database", "alan","");
DBDO::debugLevel(DBDO::E_ALL);

DBDO::config("test", "class_name", "Test_%s");
DBDO::config("test", "require_path", dirname(__FILE__)."/Test_%s.php");


$x = DBDO::factory('test', 'typetest');

$x->limit(1);
$x->query();

$x->fetch();
//print_r($x);

var_dump($x->valueGet('a_date'));
var_dump($x->a_date);
var_dump($x->a_date);
var_dump($x->a_date);

var_dump($x->valueGet('a_date'));
var_dump($x->a_date);
var_dump($x->valueGet('a_time'));
var_dump($x->a_time);
var_dump($x->valueGet('a_datetime'));
var_dump($x->a_datetime);
var_dump($x->valueGet('b_date'));
var_dump($x->b_date);
var_dump($x->valueGet('ts'));
var_dump($x->ts);
var_dump($x->valueGet('b_bool'));
var_dump($x->b_bool);
var_dump($x->valueGet('v_varchar'));
var_dump($x->v_varchar);

print_R($x);
 



-- 
PECL CVS Mailing List 
To unsubscribe, visit: http://www.php.net/unsub.php

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic