summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHartmut Holzgraefe <hholzgra@php.net>2001-09-17 19:49:17 +0000
committerHartmut Holzgraefe <hholzgra@php.net>2001-09-17 19:49:17 +0000
commit75095ce66c9f17f96f9711213b75a7c8fd8e008b (patch)
tree1bdfcebca89185983cd29cbefebc0bf8242e2ccb
parent891443e15feb78b12b93f350cb235355731a1d88 (diff)
downloadphp-git-75095ce66c9f17f96f9711213b75a7c8fd8e008b.tar.gz
got rid of strtok and added some comments
-rw-r--r--ext/dbplus/php_dbplus.c121
1 files changed, 84 insertions, 37 deletions
diff --git a/ext/dbplus/php_dbplus.c b/ext/dbplus/php_dbplus.c
index b73642da9a..3e5e8da10e 100644
--- a/ext/dbplus/php_dbplus.c
+++ b/ext/dbplus/php_dbplus.c
@@ -21,6 +21,8 @@
#include "php_ini.h"
#include "php_dbplus.h"
+#include "ext/standard/php_string.h"
+
#include <saccess.h>
#include <relation.h>
#include <dblight.h>
@@ -61,46 +63,64 @@ var2tuple(relf *r, zval **zv, tuple *t)
if (! *element) {
return 1;
}
-
+
switch(ap->att_type) {
+
case FT_SHORT:
+ /* short integer */
convert_to_long_ex(element);
AFFIX(ap, t)->f_short = (short) (*element)->value.lval;
break;
- case FT_UNSIGNED:
+
+ case FT_UNSIGNED:
+ /* unsigned short integer */
convert_to_long_ex(element);
AFFIX(ap, t)->f_unsigned = (unsigned) (*element)->value.lval;
break;
- case FT_SEQUENCE:
+
case FT_LONG:
+ /* 32bit signed long */
+ case FT_SEQUENCE:
+ /* unique sequence number -> just a long to outsiders */
convert_to_long_ex(element);
- AFFIX(ap, t)->f_long = (long) (*element)->value.lval;
+ AFFIX(ap, t)->f_long = (long4) (*element)->value.lval;
break;
+
case FT_DATE:
+ /* date -> long containing YYYYMMDD */
convert_to_long_ex(element);
- AFFIX(ap, t)->f_date = (long) (*element)->value.lval;
+ AFFIX(ap, t)->f_date = (long4) (*element)->value.lval;
break;
+
case FT_TIME:
+ /* time as unix timestamp */
convert_to_long_ex(element);
- AFFIX(ap, t)->f_time = (long) (*element)->value.lval;
+ AFFIX(ap, t)->f_time = (long4) (*element)->value.lval;
break;
+
case FT_FLOAT:
+ /* single prec. floating point */
convert_to_double_ex(element);
AFFIX(ap, t)->f_float = (float) (*element)->value.dval;
break;
+
case FT_DOUBLE:
+ /* double prec. floating point */
convert_to_double_ex(element);
AFFIX(ap, t)->f_double = (double) (*element)->value.dval;
break;
- case FT_STRING: case FT_DEUTSCH: case FT_CHAR:
- convert_to_string_ex(element);
- afput(ap, t, (field *)0, (*element)->value.str.val);
- break;
- case FT_TIMESTAMP:
- /* TODO
- str2timestamp(SvPV(sv, na), (timestamp *)AFFIX(ap, t));
- */
+
+ case FT_STRING:
+ case FT_DEUTSCH:
+ case FT_CHAR:
+ case FT_ANSI:
+ case FT_ISO:
+ case FT_ISOL:
+ /* different variants of Strings */
+ convert_to_string_ex(element);
+ afput(ap, t, (field *)0, (*element)->value.str.val);
break;
+
default:
php_error(E_WARNING,"%s is of yet unsupported type %d",ap->att_name,ap->att_type);
break;
@@ -823,7 +843,7 @@ PHP_FUNCTION(dbplus_rchperm)
}
/* }}} */
-/* {{{ proto int dbplus_rcreate(string name, string domlist [, int overwrite])
+/* {{{ proto int dbplus_rcreate(string name, mixed domlist [, int overwrite])
*/
PHP_FUNCTION(dbplus_rcreate)
{
@@ -852,7 +872,22 @@ PHP_FUNCTION(dbplus_rcreate)
}
convert_to_string_ex(name);
- convert_to_string_ex(domlist);
+
+ switch ( (*domlist)->type ) {
+ case IS_STRING:
+ convert_to_string_ex(domlist);
+ break;
+
+ case IS_ARRAY:
+ {
+ zval tmp;
+ ZVAL_STRING(&tmp," ",0);
+ php_implode(&tmp,*domlist,*domlist);
+ }
+ break;
+
+ default:
+ }
at0 = create2att(_STRING(domlist), &ndoms);
if (at0) {
@@ -1012,14 +1047,14 @@ PHP_FUNCTION(dbplus_restorepos)
}
/* }}} */
-/* {{{ proto int dbplus_rkeys(int relation, [string|array] domlist)
+/* {{{ proto int dbplus_rkeys(int relation, mixed domlist)
*/
PHP_FUNCTION(dbplus_rkeys)
{
relf *r, *rnew;
zval **relation, **domlist, **zdata;
int nkeys=0;
- char *p, *name=NULL, *keys[40]; /* TODO hardcoded magic number ??? */
+ char *name=NULL, *keys[40]; /* TODO hardcoded magic number ??? */
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &relation, &domlist) == FAILURE){
WRONG_PARAM_COUNT;
@@ -1027,7 +1062,8 @@ PHP_FUNCTION(dbplus_rkeys)
DBPLUS_FETCH_RESOURCE(r, relation);
- if((*domlist)->type == IS_ARRAY) {
+ switch((*domlist)->type) {
+ case IS_ARRAY:
convert_to_array_ex(domlist);
for(zend_hash_internal_pointer_reset(_HASH(domlist));
SUCCESS==zend_hash_get_current_data(_HASH(domlist), (void **)&zdata);
@@ -1035,19 +1071,25 @@ PHP_FUNCTION(dbplus_rkeys)
if((*zdata)->type==IS_STRING)
keys[nkeys++] = _STRING(zdata);
else {
- php_error(E_WARNING, "Domlist array contains non-string value(s)");
+ php_error(E_WARNING, "dbplus_rkeys: domlist array contains non-string value(s)");
Acc_error = ERR_USER;
RETURN_FALSE;
}
}
- } else {
+ break;
+
+ case IS_STRING:
convert_to_string_ex(domlist);
- name = estrdup(_STRING(domlist));
- while ( ( p = strtok ( nkeys ? 0 : name, " \t") ) ) {
- keys[nkeys++] = p;
- }
+ keys[0] = _STRING(domlist);
+ nkeys = 1;
+ break;
+
+ default:
+ php_error(E_WARNING, "dbplus_rkeys: domlist has to be of type string or an array of strings");
+ Acc_error = ERR_USER;
+ RETURN_FALSE;
}
-
+
rnew = cdbRkeys(r, nkeys, keys);
if(name) efree(name);
@@ -1127,14 +1169,14 @@ PHP_FUNCTION(dbplus_rrename)
}
/* }}} */
-/* {{{ proto int dbplus_rsecindex(int relation, string domlist, int compact)
+/* {{{ proto int dbplus_rsecindex(int relation, mixed domlist, int compact)
*/
PHP_FUNCTION(dbplus_rsecindex)
{
relf *r, *rnew;
zval **relation, **domlist, **compact, **zdata;
int nkeys=0;
- char *p, *name=NULL, *keys[40]; /* TODO hardcoded magic number ??? */
+ char *name=NULL, *keys[40]; /* TODO hardcoded magic number ??? */
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &relation, &domlist, &compact) == FAILURE){
WRONG_PARAM_COUNT;
@@ -1142,7 +1184,8 @@ PHP_FUNCTION(dbplus_rsecindex)
DBPLUS_FETCH_RESOURCE(r, relation);
- if((*domlist)->type == IS_ARRAY) {
+ switch ( (*domlist)->type ) {
+ case IS_ARRAY:
convert_to_array_ex(domlist);
for(zend_hash_internal_pointer_reset(_HASH(domlist));
SUCCESS==zend_hash_get_current_data(_HASH(domlist), (void **)&zdata);
@@ -1150,23 +1193,27 @@ PHP_FUNCTION(dbplus_rsecindex)
if((*zdata)->type==IS_STRING)
keys[nkeys++] = _STRING(zdata);
else {
- php_error(E_WARNING, "Domlist array contains non-string value(s)");
+ php_error(E_WARNING, "dbplus_rsecindex: domlist array contains non-string value(s)");
Acc_error = ERR_USER;
RETURN_FALSE;
}
}
- } else {
+ break;
+
+ case IS_STRING:
convert_to_string_ex(domlist);
- name = estrdup(_STRING(domlist));
- while ( ( p = strtok ( nkeys ? 0 : name, " ") ) ) {
- keys[nkeys++] = p;
- }
+ keys[0] = _STRING(domlist);
+ nkeys = 1;
+ break;
+
+ default:
+ php_error(E_WARNING, "dbplus_rsecindex: domlist has to be of type string or an array of strings");
+ Acc_error = ERR_USER;
+ RETURN_FALSE;
}
convert_to_long_ex(compact);
- php_error(E_WARNING,"nkeys: %d keys: '%s', compact: %s",nkeys,keys,_INT(compact));
-
rnew = cdbRsecindex(r, nkeys, keys, _INT(compact));
if(name) efree(name);