[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