diff options
author | Nikos Mavroyanopoulos <nmav@php.net> | 2000-11-08 16:16:49 +0000 |
---|---|---|
committer | Nikos Mavroyanopoulos <nmav@php.net> | 2000-11-08 16:16:49 +0000 |
commit | f6a8f905b1233077df481e66c5660a39668f0b2e (patch) | |
tree | 05c7ad3986842ca0c886f7bc4454318841545e36 /ext/ovrimos/ovrimos.c | |
parent | 63cdbbd56ecba0490187354418ab572d05b2106b (diff) | |
download | php-git-f6a8f905b1233077df481e66c5660a39668f0b2e.tar.gz |
Added license
Diffstat (limited to 'ext/ovrimos/ovrimos.c')
-rw-r--r-- | ext/ovrimos/ovrimos.c | 1720 |
1 files changed, 926 insertions, 794 deletions
diff --git a/ext/ovrimos/ovrimos.c b/ext/ovrimos/ovrimos.c index c1788977b8..531d16ff68 100644 --- a/ext/ovrimos/ovrimos.c +++ b/ext/ovrimos/ovrimos.c @@ -1,117 +1,142 @@ -#include <stdio.h> -#include <string.h> - -/* #include <dl/phpdl.h> */ +/* + +----------------------------------------------------------------------+ + | PHP version 4.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.02 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_02.txt. | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Dimitris Souflis <dsouflis@acm.org>, <dsouflis@ovrimos.com> | + | integrated to php by Nikos Mavroyanopoulos <nmav@altera.gr> | + +----------------------------------------------------------------------+ +*/ #include <php.h> #include <php_globals.h> #include <zend_API.h> #include "ext/standard/php_standard.h" #include "ext/standard/info.h" - #include <sqlcli.h> - #if !defined(WIN32) # define stricmp strcasecmp #endif - -static longreadlen=0; +static longreadlen = 0; static void column_to_string(SQLS stmt, int i, char *buffer, int *len); -PHP_MINFO_FUNCTION(ovrimos) { - php_printf(""Ovrimos" module<br>\n"); +PHP_MINFO_FUNCTION(ovrimos) +{ + php_printf(""Ovrimos" module<br>\n"); } /* Main User Functions */ /* {{{ proto int ovrimos_connect(string host, string db, string user, string password) Connect to an Ovrimos database */ -PHP_FUNCTION(ovrimos_connect) { - pval *arg1, *arg2, *arg3, *arg4; - SQLH conn=0; - if(ARG_COUNT(ht)!=4 || getParameters(ht,4,&arg1,&arg2,&arg3,&arg4)==FAILURE) { - WRONG_PARAM_COUNT; - } - convert_to_string(arg1); - convert_to_string(arg2); - convert_to_string(arg3); - convert_to_string(arg4); - if(!sqlConnect(arg1->value.str.val,arg2->value.str.val,arg3->value.str.val, - arg4->value.str.val,&conn, 0)) { - RETURN_LONG(0); - } - RETURN_LONG((int)conn+1); +PHP_FUNCTION(ovrimos_connect) +{ + pval *arg1, *arg2, *arg3, *arg4; + SQLH conn = 0; + if (ARG_COUNT(ht) != 4 + || getParameters(ht, 4, &arg1, &arg2, &arg3, &arg4) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_string(arg1); + convert_to_string(arg2); + convert_to_string(arg3); + convert_to_string(arg4); + if (!sqlConnect + (arg1->value.str.val, arg2->value.str.val, arg3->value.str.val, + arg4->value.str.val, &conn, 0)) { + RETURN_LONG(0); + } + RETURN_LONG((int) conn + 1); } + /* }}} */ /* {{{ proto void ovrimos_close(int connection) Close a connection */ -PHP_FUNCTION(ovrimos_close) { - pval *arg1; - SQLH conn; - if(ARG_COUNT(ht)!=1 || getParameters(ht,1,&arg1)==FAILURE || arg1->type!=IS_LONG) { - WRONG_PARAM_COUNT; - } - conn=(SQLH)(arg1->value.lval-1); - (void)sqlDisConnect(conn); +PHP_FUNCTION(ovrimos_close) +{ + pval *arg1; + SQLH conn; + if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE + || arg1->type != IS_LONG) { + WRONG_PARAM_COUNT; + } + conn = (SQLH) (arg1->value.lval - 1); + (void) sqlDisConnect(conn); } + /* }}} */ /* {{{ proto void ovrimos_close_all() Close all connections */ -PHP_FUNCTION(ovrimos_close_all) { - pval *arg1; - SQLH conn; - (void)sqlDisconnectAll(); +PHP_FUNCTION(ovrimos_close_all) +{ + pval *arg1; + SQLH conn; + (void) sqlDisconnectAll(); } + /* }}} */ /* {{{ proto int ovrimos_longreadlen(int result_id, int length) Handle LONG columns */ -PHP_FUNCTION(ovrimos_longreadlen) { - pval *arg1, *arg2; - if (getParameters(ht, 2, &arg1, &arg2) == FAILURE){ - WRONG_PARAM_COUNT; - } - convert_to_long(arg1); - convert_to_long(arg2); - longreadlen=arg2->value.lval; - RETURN_TRUE; +PHP_FUNCTION(ovrimos_longreadlen) +{ + pval *arg1, *arg2; + if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long(arg1); + convert_to_long(arg2); + longreadlen = arg2->value.lval; + RETURN_TRUE; } + /* }}} */ /* {{{ proto int ovrimos_prepare(int connection_id, string query) Prepares a statement for execution */ -PHP_FUNCTION(ovrimos_prepare) { - pval *arg1, *arg2; - SQLH conn; - char *query; - SQLS stmt; - - if (getParameters(ht, 2, &arg1, &arg2) == FAILURE){ - WRONG_PARAM_COUNT; - } - convert_to_long(arg1); - convert_to_string(arg2); - conn = (SQLH)(arg1->value.lval-1); - query = arg2->value.str.val; - - if(!sqlAllocStmt(conn,&stmt)) { - RETURN_FALSE; - } - if(!sqlPrepare(stmt,query)) { - sqlFreeStmt(stmt); - RETURN_FALSE; - } - if(!sqlGetOutputColDescr(stmt)) { - sqlFreeStmt(stmt); - RETURN_FALSE; - } - if(!sqlGetParamDescr(stmt)) { - sqlFreeStmt(stmt); - RETURN_FALSE; - } - RETURN_LONG((int)stmt+1); +PHP_FUNCTION(ovrimos_prepare) +{ + pval *arg1, *arg2; + SQLH conn; + char *query; + SQLS stmt; + + if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long(arg1); + convert_to_string(arg2); + conn = (SQLH) (arg1->value.lval - 1); + query = arg2->value.str.val; + + if (!sqlAllocStmt(conn, &stmt)) { + RETURN_FALSE; + } + if (!sqlPrepare(stmt, query)) { + sqlFreeStmt(stmt); + RETURN_FALSE; + } + if (!sqlGetOutputColDescr(stmt)) { + sqlFreeStmt(stmt); + RETURN_FALSE; + } + if (!sqlGetParamDescr(stmt)) { + sqlFreeStmt(stmt); + RETURN_FALSE; + } + RETURN_LONG((int) stmt + 1); } + /* }}} */ /* @@ -119,834 +144,941 @@ PHP_FUNCTION(ovrimos_prepare) { */ /* {{{ proto int ovrimos_execute(int result_id [, array parameters_array]) Execute a prepared statement */ -PHP_FUNCTION(ovrimos_execute) { - pval *arg1, *arg2; - SQLS stmt; - int numArgs; - int icol, colnb; - numArgs = ARG_COUNT(ht); - - if (getParameters(ht, numArgs, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - convert_to_long(arg1); - stmt=(SQLS)(arg1->value.lval-1); - colnb=sqlGetParamNb(stmt); - - if(colnb!=0) { - pval **tmp; - int arr_elem; - - if (arg2->type != IS_ARRAY){ - php_error(E_WARNING, "Not an array in call to ovrimos_execute()"); - RETURN_FALSE; - } - arr_elem=zend_hash_num_elements(arg2->value.ht); - if (arr_elem < colnb) { - php_error(E_WARNING,"Not enough parameters in call to ovrimos_execute(): %d instead of %d",arr_elem,colnb); - RETURN_FALSE; - } - - zend_hash_internal_pointer_reset(arg2->value.ht); - - for(icol=0; icol<colnb; icol++) { - int len; - cvt_error err; - bool ret; - char *msg; - char buffer[10240]; - sql_type to_type=sqlGetParamSQLType(stmt,icol); - sql_type from_type; - - if (zend_hash_get_current_data(arg2->value.ht, (void **) &tmp) == FAILURE) { - php_error(E_WARNING,"Error getting parameter %d in call to ovrimos_execute()", icol); - RETURN_FALSE; - } - convert_to_string(*tmp); - if ((*tmp)->type != IS_STRING) { - php_error(E_WARNING,"Error converting parameter %d to string in call to ovrimos_execute()",icol); - RETURN_FALSE; - } - - /* PHP data to param type */ - from_type.type=T_VARCHAR; - from_type.u.length=(*tmp)->value.str.len; - - *buffer=0; - memcpy(buffer+1,(*tmp)->value.str.val,from_type.u.length); - buffer[from_type.u.length+1]=0; - - ret=type_convert(buffer,&from_type,&to_type,0,&err); - switch(err) { - case cvt_trunc: msg="Data truncated"; break; - case cvt_range: msg="Numeric value out of range"; break; - case cvt_prec: msg="Precision lost"; break; - case cvt_incomp: msg="Restricted data type attribute violation"; break; - case cvt_no: msg="Conversion failed"; break; - } - if(!ret) { - php_error(E_WARNING,"Error converting parameter %d: %s in call to ovrimos_execute()",icol, msg); - RETURN_FALSE; - } - - len=sql_type_size(to_type)-1; - if(!sqlPutParam(stmt,icol,buffer+1,len)) { - php_error(E_WARNING, "Could send parameter %d (%d bytes) in call to ovrimos_execute()",icol,len); - RETURN_FALSE; - } - } - } - - if(!sqlExec(stmt)) { - RETURN_FALSE; - } - - RETURN_TRUE; +PHP_FUNCTION(ovrimos_execute) +{ + pval *arg1, *arg2; + SQLS stmt; + int numArgs; + int icol, colnb; + numArgs = ARG_COUNT(ht); + + if (getParameters(ht, numArgs, &arg1, &arg2) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_long(arg1); + stmt = (SQLS) (arg1->value.lval - 1); + colnb = sqlGetParamNb(stmt); + + if (colnb != 0) { + pval **tmp; + int arr_elem; + + if (arg2->type != IS_ARRAY) { + php_error(E_WARNING, + "Not an array in call to ovrimos_execute()"); + RETURN_FALSE; + } + arr_elem = zend_hash_num_elements(arg2->value.ht); + if (arr_elem < colnb) { + php_error(E_WARNING, + "Not enough parameters in call to ovrimos_execute(): %d instead of %d", + arr_elem, colnb); + RETURN_FALSE; + } + + zend_hash_internal_pointer_reset(arg2->value.ht); + + for (icol = 0; icol < colnb; icol++) { + int len; + cvt_error err; + bool ret; + char *msg; + char buffer[10240]; + sql_type to_type = sqlGetParamSQLType(stmt, icol); + sql_type from_type; + + if (zend_hash_get_current_data + (arg2->value.ht, (void **) &tmp) == FAILURE) { + php_error(E_WARNING, + "Error getting parameter %d in call to ovrimos_execute()", + icol); + RETURN_FALSE; + } + convert_to_string(*tmp); + if ((*tmp)->type != IS_STRING) { + php_error(E_WARNING, + "Error converting parameter %d to string in call to ovrimos_execute()", + icol); + RETURN_FALSE; + } + + /* PHP data to param type */ + from_type.type = T_VARCHAR; + from_type.u.length = (*tmp)->value.str.len; + + *buffer = 0; + memcpy(buffer + 1, (*tmp)->value.str.val, + from_type.u.length); + buffer[from_type.u.length + 1] = 0; + + ret = + type_convert(buffer, &from_type, &to_type, 0, + &err); + switch (err) { + case cvt_trunc: + msg = "Data truncated"; + break; + case cvt_range: + msg = "Numeric value out of range"; + break; + case cvt_prec: + msg = "Precision lost"; + break; + case cvt_incomp: + msg = + "Restricted data type attribute violation"; + break; + case cvt_no: + msg = "Conversion failed"; + break; + } + if (!ret) { + php_error(E_WARNING, + "Error converting parameter %d: %s in call to ovrimos_execute()", + icol, msg); + RETURN_FALSE; + } + + len = sql_type_size(to_type) - 1; + if (!sqlPutParam(stmt, icol, buffer + 1, len)) { + php_error(E_WARNING, + "Could send parameter %d (%d bytes) in call to ovrimos_execute()", + icol, len); + RETURN_FALSE; + } + } + } + + if (!sqlExec(stmt)) { + RETURN_FALSE; + } + + RETURN_TRUE; } + /* }}} */ /* {{{ proto string ovrimos_cursor(int result_id) Get cursor name */ -PHP_FUNCTION(ovrimos_cursor) { - char cname[126]; - pval *arg1; - SQLS stmt; - - if ( getParameters(ht, 1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - convert_to_long(arg1); - stmt=(SQLS)(arg1->value.lval-1); - if(!sqlGetCursorName(stmt,cname)) { - RETURN_FALSE; - } - RETURN_STRING(cname,1); +PHP_FUNCTION(ovrimos_cursor) +{ + char cname[126]; + pval *arg1; + SQLS stmt; + + if (getParameters(ht, 1, &arg1) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long(arg1); + stmt = (SQLS) (arg1->value.lval - 1); + if (!sqlGetCursorName(stmt, cname)) { + RETURN_FALSE; + } + RETURN_STRING(cname, 1); } + /* }}} */ /* {{{ proto int ovrimos_exec(int connection_id, string query) Prepare and execute an SQL statement */ -PHP_FUNCTION(ovrimos_exec) { - pval *arg1, *arg2; - SQLH conn; - SQLS stmt; - int numArgs; - char *query; - numArgs = ARG_COUNT(ht); - if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - convert_to_long(arg1); - convert_to_string(arg2); - conn = (SQLH)(arg1->value.lval-1); - query = arg2->value.str.val; - - if(!sqlAllocStmt(conn,&stmt)) { - RETURN_FALSE; - } - if(!sqlExecDirect(stmt,query)) { - sqlFreeStmt(stmt); - RETURN_FALSE; - } - if(!sqlGetOutputColDescr(stmt)) { - sqlFreeStmt(stmt); - RETURN_FALSE; - } - if(!sqlGetParamDescr(stmt)) { - sqlFreeStmt(stmt); - RETURN_FALSE; - } - RETURN_LONG((int)stmt+1); +PHP_FUNCTION(ovrimos_exec) +{ + pval *arg1, *arg2; + SQLH conn; + SQLS stmt; + int numArgs; + char *query; + numArgs = ARG_COUNT(ht); + if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_long(arg1); + convert_to_string(arg2); + conn = (SQLH) (arg1->value.lval - 1); + query = arg2->value.str.val; + + if (!sqlAllocStmt(conn, &stmt)) { + RETURN_FALSE; + } + if (!sqlExecDirect(stmt, query)) { + sqlFreeStmt(stmt); + RETURN_FALSE; + } + if (!sqlGetOutputColDescr(stmt)) { + sqlFreeStmt(stmt); + RETURN_FALSE; + } + if (!sqlGetParamDescr(stmt)) { + sqlFreeStmt(stmt); + RETURN_FALSE; + } + RETURN_LONG((int) stmt + 1); } + /* }}} */ -static void column_to_string(SQLS stmt, int i, char *buffer, int *len) { - const char *bf=sqlColValue(stmt,i,0); - switch(sqlGetOutputColType(stmt,i)) { - case T_BIGINT: - case T_UBIGINT: { - switch(sqlGetOutputColType(stmt,i)) { - case T_BIGINT: - printsint64(Read(sint64,bf),buffer); break; - case T_UBIGINT: - printuint64(Read(uint64,bf),buffer); break; - } - *len=strlen(buffer); - } break; - case T_INTEGER: - sprintf(buffer,"%11ld",Read(sint32,bf)); - *len=strlen(buffer); - break; - case T_UINTEGER: - sprintf(buffer,"%10lu",Read(uint32,bf)); - *len=strlen(buffer); - break; - case T_SMALLINT: - sprintf(buffer,"%6hd",Read(sint16,bf)); - *len=strlen(buffer); - break; - case T_USMALLINT: - sprintf(buffer,"%5hu",Read(uint16,bf)); - *len=strlen(buffer); - break; - case T_TINYINT: - sprintf(buffer,"%4hd",(sint16)Read(sint8,bf)); - *len=strlen(buffer); - break; - case T_UTINYINT: - sprintf(buffer,"%3hu",(uint16)Read(uint8,bf)); - *len=strlen(buffer); - break; - case T_BIT: - sprintf(buffer,"%s",(Read(uint8,bf)==0)?"off":"on"); - *len=strlen(buffer); - break; - case T_REAL: - sprintf(buffer,"%9.7g",(double)Read(float,bf)); - *len=strlen(buffer); - break; - - case T_FLOAT: - case T_DOUBLE: - sprintf(buffer,"%19.17g",Read(double,bf)); - *len=strlen(buffer); - break; - case T_DECIMAL: - case T_NUMERIC: { - int prec=sqlGetOutputColPrecision(stmt,i); - int scale=sqlGetOutputColScale(stmt,i); - sprintf(buffer,"%*.*f",prec+2,scale,Read(double,bf)); - *len=strlen(buffer); - } break; - case T_CHAR: - case T_VARCHAR: - strcpy(buffer,bf); - *len=strlen(buffer); - break; - case T_UNI_CHAR: - case T_UNI_VARCHAR: - uni_strcpy((uni_char*)buffer,(uni_char*)bf); - *len=uni_strlen((uni_char*)buffer); - break; - case T_BINARY: { - int sz=sqlGetOutputColLength(stmt,i); - memcpy(buffer,bf,sz); - *len=sz; - } break; - - case T_VARBINARY: { - int sz=Read(uint16,bf); - memcpy(buffer,bf+2,sz); - *len=sz; - } break; - - case T_DATE: { - char db[11]; - if(!sql_date_to_str((uint32*)bf,buffer)) { - strcpy(buffer,"Error!"); - } - } break; - - case T_TIME: { - int prec=sqlGetOutputColPrecision(stmt,i); - if(!sql_time_to_str((uint32*)bf,prec,0,buffer)) { - strcpy(buffer,"Error!"); - } - } break; - - case T_TIMESTAMP: { - int prec=sqlGetOutputColPrecision(stmt,i); - if(!sql_timestamp_to_str((uint32*)bf,prec,0,buffer)) { - strcpy(buffer,"Error!"); - } - - } break; - - case T_LONGVARCHAR: - case T_LONGVARBINARY: { - if(longreadlen==0) { - *buffer=0; - *len=0; - } else if(!sqlColValueLong(stmt,i,0,0,longreadlen,buffer,len)) { - strcpy(buffer,"Error!"); - } - } break; - } +static void column_to_string(SQLS stmt, int i, char *buffer, int *len) +{ + const char *bf = sqlColValue(stmt, i, 0); + switch (sqlGetOutputColType(stmt, i)) { + case T_BIGINT: + case T_UBIGINT:{ + switch (sqlGetOutputColType(stmt, i)) { + case T_BIGINT: + printsint64(Read(sint64, bf), buffer); + break; + case T_UBIGINT: + printuint64(Read(uint64, bf), buffer); + break; + } + *len = strlen(buffer); + } + break; + case T_INTEGER: + sprintf(buffer, "%11ld", Read(sint32, bf)); + *len = strlen(buffer); + break; + case T_UINTEGER: + sprintf(buffer, "%10lu", Read(uint32, bf)); + *len = strlen(buffer); + break; + case T_SMALLINT: + sprintf(buffer, "%6hd", Read(sint16, bf)); + *len = strlen(buffer); + break; + case T_USMALLINT: + sprintf(buffer, "%5hu", Read(uint16, bf)); + *len = strlen(buffer); + break; + case T_TINYINT: + sprintf(buffer, "%4hd", (sint16) Read(sint8, bf)); + *len = strlen(buffer); + break; + case T_UTINYINT: + sprintf(buffer, "%3hu", (uint16) Read(uint8, bf)); + *len = strlen(buffer); + break; + case T_BIT: + sprintf(buffer, "%s", + (Read(uint8, bf) == 0) ? "off" : "on"); + *len = strlen(buffer); + break; + case T_REAL: + sprintf(buffer, "%9.7g", (double) Read(float, bf)); + *len = strlen(buffer); + break; + + case T_FLOAT: + case T_DOUBLE: + sprintf(buffer, "%19.17g", Read(double, bf)); + *len = strlen(buffer); + break; + case T_DECIMAL: + case T_NUMERIC:{ + int prec = sqlGetOutputColPrecision(stmt, i); + int scale = sqlGetOutputColScale(stmt, i); + sprintf(buffer, "%*.*f", prec + 2, scale, + Read(double, bf)); + *len = strlen(buffer); + } break; + case T_CHAR: + case T_VARCHAR: + strcpy(buffer, bf); + *len = strlen(buffer); + break; + case T_UNI_CHAR: + case T_UNI_VARCHAR: + uni_strcpy((uni_char *) buffer, (uni_char *) bf); + *len = uni_strlen((uni_char *) buffer); + break; + case T_BINARY:{ + int sz = sqlGetOutputColLength(stmt, i); + memcpy(buffer, bf, sz); + *len = sz; + } break; + + case T_VARBINARY:{ + int sz = Read(uint16, bf); + memcpy(buffer, bf + 2, sz); + *len = sz; + } break; + + case T_DATE:{ + char db[11]; + if (!sql_date_to_str((uint32 *) bf, buffer)) { + strcpy(buffer, "Error!"); + } + } + break; + + case T_TIME:{ + int prec = sqlGetOutputColPrecision(stmt, i); + if (!sql_time_to_str + ((uint32 *) bf, prec, 0, buffer)) { + strcpy(buffer, "Error!"); + } + } + break; + + case T_TIMESTAMP:{ + int prec = sqlGetOutputColPrecision(stmt, i); + if (!sql_timestamp_to_str + ((uint32 *) bf, prec, 0, buffer)) { + strcpy(buffer, "Error!"); + } + + } + break; + + case T_LONGVARCHAR: + case T_LONGVARBINARY:{ + if (longreadlen == 0) { + *buffer = 0; + *len = 0; + } else + if (!sqlColValueLong + (stmt, i, 0, 0, longreadlen, buffer, len)) { + strcpy(buffer, "Error!"); + } + } + break; + } } /* {{{ proto int ovrimos_fetch_into(int result_id, array result_array [, string how, [int rownumber]]) Fetch one result row into an array how: 'Next' (default), 'Prev', 'First', 'Last', 'Absolute' */ -PHP_FUNCTION(ovrimos_fetch_into) { - int numArgs; - char *s_how; - typedef enum { h_next=0, h_prev, h_first, h_last, h_absolute } h_type; - h_type how=h_next; /* default */ - sint32 rownum = 0; - pval *arg_id, *arg_how=0, *arg_row=0, *arr, *tmp; - SQLS stmt; - int icol,colnb; - bool ret; - numArgs = ARG_COUNT(ht); - - switch(numArgs){ - case 2: - if (getParameters(ht, 2, &arg_id, &arr) == FAILURE) - WRONG_PARAM_COUNT; - break; - case 3: - if (getParameters(ht, 3, &arg_id, &arr, &arg_how) == FAILURE) - WRONG_PARAM_COUNT; - break; - case 4: - if (getParameters(ht, 4, &arg_id, &arr, &arg_how, &arg_row) == FAILURE) - WRONG_PARAM_COUNT; - break; - default: - WRONG_PARAM_COUNT; - } - - convert_to_long(arg_id); - stmt = (SQLS)(arg_id->value.lval-1); - - if(arg_how!=0) { - if(arg_how->type!=IS_STRING) { - php_error(E_WARNING, "Third argument not string in ovrimos_fetch_into()"); - RETURN_FALSE; - } - s_how = arg_how->value.str.val; - if(stricmp(s_how,"next")==0) { - how=h_next; - } else if(stricmp(s_how,"prev")==0) { - how=h_prev; - } else if(stricmp(s_how,"first")==0) { - how=h_first; - } else if(stricmp(s_how,"last")==0) { - how=h_last; - } else if(stricmp(s_how,"absolute")==0) { - how=h_absolute; - } else { - php_error(E_WARNING, "Third argument not valid in ovrimos_fetch_into()"); - RETURN_FALSE; - } - if(arg_row==0 && how==h_absolute) { - php_error(E_WARNING, "Fourth argument is required for ABSOLUTE in ovrimos_fetch_into()"); - RETURN_FALSE; - } - if(arg_row!=0) { - convert_to_long(arg_row); - rownum = arg_row->value.lval; - switch(how) { - case h_next: - case h_prev: - rownum--; /* Next 1 should send FUNC_CURSOR_NEXT(0) */ - break; - } - } - } - - if (!ParameterPassedByReference(ht, 2)){ /* 1-based?...*/ - php_error(E_WARNING, "Array not passed by reference in call to ovrimos_fetch_into()"); - RETURN_FALSE; - } - - if (arr->type != IS_ARRAY){ - if (array_init(arr) == FAILURE){ - php_error(E_WARNING, "Can't convert to type Array"); - RETURN_FALSE; - } - } - switch(how) { - case h_absolute: - case h_first: - ret=sqlCursorFirst(stmt,rownum); - break; - case h_last: - ret=sqlCursorLast(stmt,rownum); - break; - case h_next: - ret=sqlCursorNext(stmt,rownum); - break; - case h_prev: - ret=sqlCursorPrev(stmt,rownum); - break; - } - if(!ret) { - RETURN_FALSE; - } - colnb=sqlGetOutputColNb(stmt); - for(icol=0; icol<colnb; icol++) { - int len; - char buffer[10240]; - tmp = (pval *) emalloc(sizeof(pval)); - tmp->refcount=1; - tmp->type = IS_STRING; - tmp->value.str.len = 0; - - /* Produce column value in 'tmp' ...*/ - column_to_string(stmt, icol, buffer,&len); - tmp->value.str.len=len; - tmp->value.str.val=estrndup(buffer,len); - - zend_hash_index_update(arr->value.ht, icol, &tmp, sizeof(pval *), NULL); - } - RETURN_TRUE; +PHP_FUNCTION(ovrimos_fetch_into) +{ + int numArgs; + char *s_how; + typedef enum { h_next = 0, h_prev, h_first, h_last, h_absolute + } h_type; + h_type how = h_next; /* default */ + sint32 rownum = 0; + pval *arg_id, *arg_how = 0, *arg_row = 0, *arr, *tmp; + SQLS stmt; + int icol, colnb; + bool ret; + numArgs = ARG_COUNT(ht); + + switch (numArgs) { + case 2: + if (getParameters(ht, 2, &arg_id, &arr) == FAILURE) + WRONG_PARAM_COUNT; + break; + case 3: + if (getParameters(ht, 3, &arg_id, &arr, &arg_how) == + FAILURE) WRONG_PARAM_COUNT; + break; + case 4: + if (getParameters(ht, 4, &arg_id, &arr, &arg_how, &arg_row) + == FAILURE) + WRONG_PARAM_COUNT; + break; + default: + WRONG_PARAM_COUNT; + } + + convert_to_long(arg_id); + stmt = (SQLS) (arg_id->value.lval - 1); + + if (arg_how != 0) { + if (arg_how->type != IS_STRING) { + php_error(E_WARNING, + "Third argument not string in ovrimos_fetch_into()"); + RETURN_FALSE; + } + s_how = arg_how->value.str.val; + if (stricmp(s_how, "next") == 0) { + how = h_next; + } else if (stricmp(s_how, "prev") == 0) { + how = h_prev; + } else if (stricmp(s_how, "first") == 0) { + how = h_first; + } else if (stricmp(s_how, "last") == 0) { + how = h_last; + } else if (stricmp(s_how, "absolute") == 0) { + how = h_absolute; + } else { + php_error(E_WARNING, + "Third argument not valid in ovrimos_fetch_into()"); + RETURN_FALSE; + } + if (arg_row == 0 && how == h_absolute) { + php_error(E_WARNING, + "Fourth argument is required for ABSOLUTE in ovrimos_fetch_into()"); + RETURN_FALSE; + } + if (arg_row != 0) { + convert_to_long(arg_row); + rownum = arg_row->value.lval; + switch (how) { + case h_next: + case h_prev: + rownum--; /* Next 1 should send FUNC_CURSOR_NEXT(0) */ + break; + } + } + } + + if (!ParameterPassedByReference(ht, 2)) { /* 1-based?... */ + php_error(E_WARNING, + "Array not passed by reference in call to ovrimos_fetch_into()"); + RETURN_FALSE; + } + + if (arr->type != IS_ARRAY) { + if (array_init(arr) == FAILURE) { + php_error(E_WARNING, + "Can't convert to type Array"); + RETURN_FALSE; + } + } + switch (how) { + case h_absolute: + case h_first: + ret = sqlCursorFirst(stmt, rownum); + break; + case h_last: + ret = sqlCursorLast(stmt, rownum); + break; + case h_next: + ret = sqlCursorNext(stmt, rownum); + break; + case h_prev: + ret = sqlCursorPrev(stmt, rownum); + break; + } + if (!ret) { + RETURN_FALSE; + } + colnb = sqlGetOutputColNb(stmt); + for (icol = 0; icol < colnb; icol++) { + int len; + char buffer[10240]; + tmp = (pval *) emalloc(sizeof(pval)); + tmp->refcount = 1; + tmp->type = IS_STRING; + tmp->value.str.len = 0; + + /* Produce column value in 'tmp' ... */ + column_to_string(stmt, icol, buffer, &len); + tmp->value.str.len = len; + tmp->value.str.val = estrndup(buffer, len); + + zend_hash_index_update(arr->value.ht, icol, &tmp, + sizeof(pval *), NULL); + } + RETURN_TRUE; } + /* }}} */ /* {{{ proto int ovrimos_fetch_row(int result_id [, int how, [int row_number]]) how: 'Next' (default), 'Prev', 'First', 'Last', 'Absolute' Fetch a row */ -PHP_FUNCTION(ovrimos_fetch_row) { - int numArgs, i; - char *s_how; - typedef enum { h_next=0, h_prev, h_first, h_last, h_absolute } h_type; - h_type how=h_next; /* default */ - sint32 rownum = 0; - pval *arg_id, *arg_how=0, *arg_row=0; - SQLS stmt; - bool ret; - numArgs = ARG_COUNT(ht); - - switch(numArgs){ - case 1: - if (getParameters(ht, 1, &arg_id) == FAILURE) - WRONG_PARAM_COUNT; - break; - case 2: - if (getParameters(ht, 2, &arg_id, &arg_how) == FAILURE) - WRONG_PARAM_COUNT; - break; - case 3: - if (getParameters(ht, 3, &arg_id, &arg_how, &arg_row) == FAILURE) - WRONG_PARAM_COUNT; - break; - default: - WRONG_PARAM_COUNT; - } - - convert_to_long(arg_id); - stmt = (SQLS)(arg_id->value.lval-1); - - if(arg_how!=0) { - if(arg_how->type!=IS_STRING) { - php_error(E_WARNING, "Second argument not string in ovrimos_fetch_row()"); - RETURN_FALSE; - } - s_how = arg_how->value.str.val; - if(stricmp(s_how,"next")==0) { - how=h_next; - } else if(stricmp(s_how,"prev")==0) { - how=h_prev; - } else if(stricmp(s_how,"first")==0) { - how=h_first; - } else if(stricmp(s_how,"last")==0) { - how=h_last; - } else if(stricmp(s_how,"absolute")==0) { - how=h_absolute; - } else { - php_error(E_WARNING, "Second argument not valid in ovrimos_fetch_row()"); - RETURN_FALSE; - } - if(arg_row==0 && how==4) { - php_error(E_WARNING, "Third argument is required for ABSOLUTE in ovrimos_fetch_row()"); - RETURN_FALSE; - } - if(arg_row!=0) { - convert_to_long(arg_row); - rownum = arg_row->value.lval; - switch(how) { - case h_next: - case h_prev: - rownum--; /* Next 1 should send FUNC_CURSOR_NEXT(0) */ - break; - } - } - } - - switch(how) { - case h_absolute: - case h_first: - ret=sqlCursorFirst(stmt,rownum); - break; - case h_last: - ret=sqlCursorLast(stmt,rownum); - break; - case h_next: - ret=sqlCursorNext(stmt,rownum); - break; - case h_prev: - ret=sqlCursorPrev(stmt,rownum); - break; - } - if(!ret) { - RETURN_FALSE; - } - RETURN_TRUE; +PHP_FUNCTION(ovrimos_fetch_row) +{ + int numArgs, i; + char *s_how; + typedef enum { h_next = 0, h_prev, h_first, h_last, h_absolute + } h_type; + h_type how = h_next; /* default */ + sint32 rownum = 0; + pval *arg_id, *arg_how = 0, *arg_row = 0; + SQLS stmt; + bool ret; + numArgs = ARG_COUNT(ht); + + switch (numArgs) { + case 1: + if (getParameters(ht, 1, &arg_id) == FAILURE) + WRONG_PARAM_COUNT; + break; + case 2: + if (getParameters(ht, 2, &arg_id, &arg_how) == FAILURE) + WRONG_PARAM_COUNT; + break; + case 3: + if (getParameters(ht, 3, &arg_id, &arg_how, &arg_row) == + FAILURE) WRONG_PARAM_COUNT; + break; + default: + WRONG_PARAM_COUNT; + } + + convert_to_long(arg_id); + stmt = (SQLS) (arg_id->value.lval - 1); + + if (arg_how != 0) { + if (arg_how->type != IS_STRING) { + php_error(E_WARNING, + "Second argument not string in ovrimos_fetch_row()"); + RETURN_FALSE; + } + s_how = arg_how->value.str.val; + if (stricmp(s_how, "next") == 0) { + how = h_next; + } else if (stricmp(s_how, "prev") == 0) { + how = h_prev; + } else if (stricmp(s_how, "first") == 0) { + how = h_first; + } else if (stricmp(s_how, "last") == 0) { + how = h_last; + } else if (stricmp(s_how, "absolute") == 0) { + how = h_absolute; + } else { + php_error(E_WARNING, + "Second argument not valid in ovrimos_fetch_row()"); + RETURN_FALSE; + } + if (arg_row == 0 && how == 4) { + php_error(E_WARNING, + "Third argument is required for ABSOLUTE in ovrimos_fetch_row()"); + RETURN_FALSE; + } + if (arg_row != 0) { + convert_to_long(arg_row); + rownum = arg_row->value.lval; + switch (how) { + case h_next: + case h_prev: + rownum--; /* Next 1 should send FUNC_CURSOR_NEXT(0) */ + break; + } + } + } + + switch (how) { + case h_absolute: + case h_first: + ret = sqlCursorFirst(stmt, rownum); + break; + case h_last: + ret = sqlCursorLast(stmt, rownum); + break; + case h_next: + ret = sqlCursorNext(stmt, rownum); + break; + case h_prev: + ret = sqlCursorPrev(stmt, rownum); + break; + } + if (!ret) { + RETURN_FALSE; + } + RETURN_TRUE; } + /* }}} */ /* {{{ proto string ovrimos_result(int result_id, mixed field) Get result data */ -PHP_FUNCTION(ovrimos_result) { - int numArgs = ARG_COUNT(ht); - pval *arg_id, *arg_field; - int icol, colnb; - SQLS stmt; - int len; - char buffer[1024]; - - if (numArgs!=2 || getParameters(ht, 2, &arg_id, &arg_field) == FAILURE) - WRONG_PARAM_COUNT; - - convert_to_long(arg_id); - stmt = (SQLS)(arg_id->value.lval-1); - - colnb=sqlGetOutputColNb(stmt); - - if(arg_field->type==IS_STRING) { - int i; - for(i=0; i<colnb; i++) { - if(!stricmp(arg_field->value.str.val,sqlGetOutputColName(stmt,i))) { - icol=i; - break; - } - } - } else if(arg_field->type==IS_LONG) { - icol=arg_field->value.lval-1; - } else { - php_error(E_WARNING, "Second argument neither number nor string in ovrimos_result()"); - RETURN_FALSE; - } - if(icol<0 || icol>colnb) { - php_error(E_WARNING, "Unknown column in ovrimos_result()"); - RETURN_FALSE; - } - column_to_string(stmt, icol, buffer,&len); - - RETURN_STRINGL(buffer,len,1); +PHP_FUNCTION(ovrimos_result) +{ + int numArgs = ARG_COUNT(ht); + pval *arg_id, *arg_field; + int icol, colnb; + SQLS stmt; + int len; + char buffer[1024]; + + if (numArgs != 2 + || getParameters(ht, 2, &arg_id, + &arg_field) == FAILURE) WRONG_PARAM_COUNT; + + convert_to_long(arg_id); + stmt = (SQLS) (arg_id->value.lval - 1); + + colnb = sqlGetOutputColNb(stmt); + + if (arg_field->type == IS_STRING) { + int i; + for (i = 0; i < colnb; i++) { + if (!stricmp + (arg_field->value.str.val, + sqlGetOutputColName(stmt, i))) { + icol = i; + break; + } + } + } else if (arg_field->type == IS_LONG) { + icol = arg_field->value.lval - 1; + } else { + php_error(E_WARNING, + "Second argument neither number nor string in ovrimos_result()"); + RETURN_FALSE; + } + if (icol < 0 || icol > colnb) { + php_error(E_WARNING, "Unknown column in ovrimos_result()"); + RETURN_FALSE; + } + column_to_string(stmt, icol, buffer, &len); + + RETURN_STRINGL(buffer, len, 1); } + /* }}} */ /* {{{ proto int ovrimos_result_all(int result_id [, string format]) Print result as HTML table */ -PHP_FUNCTION(ovrimos_result_all) { - long fetched=0; - pval *arg1, *arg2; - int numArgs; - SQLS stmt; - int icol, colnb; - char buffer[1024]; - int len; - - numArgs = ARG_COUNT(ht); - if (numArgs == 1){ - if (getParameters(ht, 1, &arg1) == FAILURE) - WRONG_PARAM_COUNT; - } else { - if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) - WRONG_PARAM_COUNT; - } - - convert_to_long(arg1); - stmt = (SQLS)(arg1->value.lval-1); - - colnb=sqlGetOutputColNb(stmt); - - /* Start table tag */ - if (numArgs == 1){ - php_printf("<table><tr>"); - } else { - convert_to_string(arg2); - php_printf("<table %s ><tr>",arg2->value.str.val); - } - - for(icol = 0; icol<colnb; icol++) { - php_printf("<th>%s</th>", sqlGetOutputColName(stmt,icol)); - } - - php_printf("</tr>\n"); - - if(sqlCursorFirst(stmt,0)) { - do { - fetched++; - php_printf("<tr>"); - for(icol=0; icol<colnb; icol++) { - column_to_string(stmt, icol, buffer,&len); - php_printf("<td>%s</td>",buffer); - } - php_printf("</tr>\n"); - } while(sqlCursorNext(stmt,0)); - } - php_printf("</table>\n"); - - RETURN_LONG(fetched); +PHP_FUNCTION(ovrimos_result_all) +{ + long fetched = 0; + pval *arg1, *arg2; + int numArgs; + SQLS stmt; + int icol, colnb; + char buffer[1024]; + int len; + + numArgs = ARG_COUNT(ht); + if (numArgs == 1) { + if (getParameters(ht, 1, &arg1) == FAILURE) + WRONG_PARAM_COUNT; + } else { + if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) + WRONG_PARAM_COUNT; + } + + convert_to_long(arg1); + stmt = (SQLS) (arg1->value.lval - 1); + + colnb = sqlGetOutputColNb(stmt); + + /* Start table tag */ + if (numArgs == 1) { + php_printf("<table><tr>"); + } else { + convert_to_string(arg2); + php_printf("<table %s ><tr>", arg2->value.str.val); + } + + for (icol = 0; icol < colnb; icol++) { + php_printf("<th>%s</th>", sqlGetOutputColName(stmt, icol)); + } + + php_printf("</tr>\n"); + + if (sqlCursorFirst(stmt, 0)) { + do { + fetched++; + php_printf("<tr>"); + for (icol = 0; icol < colnb; icol++) { + column_to_string(stmt, icol, buffer, &len); + php_printf("<td>%s</td>", buffer); + } + php_printf("</tr>\n"); + } while (sqlCursorNext(stmt, 0)); + } + php_printf("</table>\n"); + + RETURN_LONG(fetched); } + /* }}} */ /* {{{ proto int ovrimos_free_result(int result_id) Free resources associated with a result */ -PHP_FUNCTION(ovrimos_free_result) { - pval *arg1; - SQLS stmt; - - if ( getParameters(ht, 1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - convert_to_long(arg1); - stmt=(SQLS)(arg1->value.lval-1); - sqlCloseCursor(stmt); - RETURN_TRUE; +PHP_FUNCTION(ovrimos_free_result) +{ + pval *arg1; + SQLS stmt; + + if (getParameters(ht, 1, &arg1) == FAILURE) { + WRONG_PARAM_COUNT; + } + convert_to_long(arg1); + stmt = (SQLS) (arg1->value.lval - 1); + sqlCloseCursor(stmt); + RETURN_TRUE; } + /* }}} */ /* {{{ proto int ovrimos_num_rows(int result_id) Get number of rows in a result */ -PHP_FUNCTION(ovrimos_num_rows) { - uint32 rows; - pval *arg1; - SQLS stmt; +PHP_FUNCTION(ovrimos_num_rows) +{ + uint32 rows; + pval *arg1; + SQLS stmt; - if ( getParameters(ht, 1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } + if (getParameters(ht, 1, &arg1) == FAILURE) { + WRONG_PARAM_COUNT; + } - convert_to_long(arg1); - stmt=(SQLS)(arg1->value.lval-1); + convert_to_long(arg1); + stmt = (SQLS) (arg1->value.lval - 1); - sqlGetRowCount(stmt, &rows); - RETURN_LONG(rows); + sqlGetRowCount(stmt, &rows); + RETURN_LONG(rows); } + /* }}} */ /* {{{ proto int ovrimos_num_fields(int result_id) Get number of columns in a result */ -PHP_FUNCTION(ovrimos_num_fields) { - pval *arg1; - SQLS stmt; +PHP_FUNCTION(ovrimos_num_fields) +{ + pval *arg1; + SQLS stmt; - if ( getParameters(ht, 1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } + if (getParameters(ht, 1, &arg1) == FAILURE) { + WRONG_PARAM_COUNT; + } - convert_to_long(arg1); - stmt=(SQLS)(arg1->value.lval-1); + convert_to_long(arg1); + stmt = (SQLS) (arg1->value.lval - 1); - RETURN_LONG(sqlGetOutputColNb(stmt)); + RETURN_LONG(sqlGetOutputColNb(stmt)); } + /* }}} */ /* {{{ proto string ovrimos_field_name(int result_id, int field_number) Get a column name */ -PHP_FUNCTION(ovrimos_field_name) { - pval *arg1, *arg2; - SQLS stmt; - int field; - - if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - convert_to_long(arg1); - convert_to_long(arg2); - stmt=(SQLS)(arg1->value.lval-1); - - if (arg2->value.lval < 1){ - php_error(E_WARNING, "Field numbering starts at 1! in call to ovrimos_field_name()"); - RETURN_FALSE; - } - - field=arg2->value.lval-1; - - if (field>=sqlGetOutputColNb(stmt)){ - php_error(E_WARNING, "No field at this index (%d) in call to ovrimos_field_name()",field); - RETURN_FALSE; - } - - RETURN_STRING((char*)sqlGetOutputColName(stmt,field),1); +PHP_FUNCTION(ovrimos_field_name) +{ + pval *arg1, *arg2; + SQLS stmt; + int field; + + if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_long(arg1); + convert_to_long(arg2); + stmt = (SQLS) (arg1->value.lval - 1); + + if (arg2->value.lval < 1) { + php_error(E_WARNING, + "Field numbering starts at 1! in call to ovrimos_field_name()"); + RETURN_FALSE; + } + + field = arg2->value.lval - 1; + + if (field >= sqlGetOutputColNb(stmt)) { + php_error(E_WARNING, + "No field at this index (%d) in call to ovrimos_field_name()", + field); + RETURN_FALSE; + } + + RETURN_STRING((char *) sqlGetOutputColName(stmt, field), 1); } + /* }}} */ /* {{{ proto string ovrimos_field_type(int result_id, int field_number) Get the datatype of a column */ -PHP_FUNCTION(ovrimos_field_type) { - pval *arg1, *arg2; - SQLS stmt; - int field; - - if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - convert_to_long(arg1); - convert_to_long(arg2); - stmt=(SQLS)(arg1->value.lval-1); - - if (arg2->value.lval < 1){ - php_error(E_WARNING, "Field numbering starts at 1! in call to ovrimos_field_type()"); - RETURN_FALSE; - } - - field=arg2->value.lval-1; - - if (field>=sqlGetOutputColNb(stmt)){ - php_error(E_WARNING, "No field at this index (%d) in call to ovrimos_field_type()",field); - RETURN_FALSE; - } - - RETURN_LONG(sqlGetOutputColType(stmt,field)); +PHP_FUNCTION(ovrimos_field_type) +{ + pval *arg1, *arg2; + SQLS stmt; + int field; + + if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_long(arg1); + convert_to_long(arg2); + stmt = (SQLS) (arg1->value.lval - 1); + + if (arg2->value.lval < 1) { + php_error(E_WARNING, + "Field numbering starts at 1! in call to ovrimos_field_type()"); + RETURN_FALSE; + } + + field = arg2->value.lval - 1; + + if (field >= sqlGetOutputColNb(stmt)) { + php_error(E_WARNING, + "No field at this index (%d) in call to ovrimos_field_type()", + field); + RETURN_FALSE; + } + + RETURN_LONG(sqlGetOutputColType(stmt, field)); } + /* }}} */ /* {{{ proto int ovrimos_field_len(int result_id, int field_number) Get the length of a column */ -PHP_FUNCTION(ovrimos_field_len) { - pval *arg1, *arg2; - SQLS stmt; - int field; - - if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) { - WRONG_PARAM_COUNT; - } - - convert_to_long(arg1); - convert_to_long(arg2); - stmt=(SQLS)(arg1->value.lval-1); - - if (arg2->value.lval < 1){ - php_error(E_WARNING, "Field numbering starts at 1! in call to ovrimos_field_len()"); - RETURN_FALSE; - } - - field=arg2->value.lval-1; - - if (field>=sqlGetOutputColNb(stmt)){ - php_error(E_WARNING, "No field at this index (%d) in call to ovrimos_field_len()",field); - RETURN_FALSE; - } - - switch(sqlGetOutputColType(stmt,field)) { - case T_LONGVARCHAR: - case T_LONGVARBINARY: - RETURN_LONG(longreadlen); - default: - RETURN_LONG(sqlGetOutputColLength(stmt,field)); - } +PHP_FUNCTION(ovrimos_field_len) +{ + pval *arg1, *arg2; + SQLS stmt; + int field; + + if (getParameters(ht, 2, &arg1, &arg2) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_long(arg1); + convert_to_long(arg2); + stmt = (SQLS) (arg1->value.lval - 1); + + if (arg2->value.lval < 1) { + php_error(E_WARNING, + "Field numbering starts at 1! in call to ovrimos_field_len()"); + RETURN_FALSE; + } + + field = arg2->value.lval - 1; + + if (field >= sqlGetOutputColNb(stmt)) { + php_error(E_WARNING, + "No field at this index (%d) in call to ovrimos_field_len()", + field); + RETURN_FALSE; + } + + switch (sqlGetOutputColType(stmt, field)) { + case T_LONGVARCHAR: + case T_LONGVARBINARY: + RETURN_LONG(longreadlen); + default: + RETURN_LONG(sqlGetOutputColLength(stmt, field)); + } } + /* }}} */ /* {{{ proto int ovrimos_field_num(int result_id, string field_name) Return column number */ -PHP_FUNCTION(ovrimos_field_num) { - pval *arg1, *arg2; - SQLS stmt; - int i,n; - - if (getParameters(ht, 2, &arg1, &arg2) == FAILURE || arg2->type!=IS_STRING) { - WRONG_PARAM_COUNT; - } - convert_to_long(arg1); - stmt=(SQLS)(arg1->value.lval-1); - n=sqlGetOutputColNb(stmt); - for(i=0; i<n; i++) { - if(!strcmp(arg2->value.str.val,sqlGetOutputColName(stmt,i))) { - RETURN_LONG(i+1); - } - } - RETURN_FALSE; +PHP_FUNCTION(ovrimos_field_num) +{ + pval *arg1, *arg2; + SQLS stmt; + int i, n; + + if (getParameters(ht, 2, &arg1, &arg2) == FAILURE + || arg2->type != IS_STRING) { + WRONG_PARAM_COUNT; + } + convert_to_long(arg1); + stmt = (SQLS) (arg1->value.lval - 1); + n = sqlGetOutputColNb(stmt); + for (i = 0; i < n; i++) { + if (!strcmp + (arg2->value.str.val, sqlGetOutputColName(stmt, i))) { + RETURN_LONG(i + 1); + } + } + RETURN_FALSE; } + /* }}} */ #if 0 /* {{{ proto int ovrimos_autocommit(int connection_id, int OnOff) Toggle autocommit mode There can be problems with pconnections!*/ -PHP_FUNCTION(ovrimos_autocommit) { +PHP_FUNCTION(ovrimos_autocommit) +{ } + /* }}} */ #endif /* {{{ proto int ovrimos_commit(int connection_id) Commit an ovrimos transaction */ -PHP_FUNCTION(ovrimos_commit) { - pval *arg1; - SQLH conn; - if(ARG_COUNT(ht)!=1 || getParameters(ht,1,&arg1)==FAILURE || arg1->type!=IS_LONG) { - WRONG_PARAM_COUNT; - } - conn=(SQLH)(arg1->value.lval-1); - if(!sqlTransactCommit(conn)) { - RETURN_FALSE; - } - RETURN_TRUE; +PHP_FUNCTION(ovrimos_commit) +{ + pval *arg1; + SQLH conn; + if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE + || arg1->type != IS_LONG) { + WRONG_PARAM_COUNT; + } + conn = (SQLH) (arg1->value.lval - 1); + if (!sqlTransactCommit(conn)) { + RETURN_FALSE; + } + RETURN_TRUE; } + /* }}} */ /* {{{ proto int ovrimos_rollback(int connection_id) Rollback a transaction */ -PHP_FUNCTION(ovrimos_rollback) { - pval *arg1; - SQLH conn; - if(ARG_COUNT(ht)!=1 || getParameters(ht,1,&arg1)==FAILURE || arg1->type!=IS_LONG) { - WRONG_PARAM_COUNT; - } - conn=(SQLH)(arg1->value.lval-1); - if(!sqlTransactRollback(conn)) { - RETURN_FALSE; - } - RETURN_TRUE; +PHP_FUNCTION(ovrimos_rollback) +{ + pval *arg1; + SQLH conn; + if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE + || arg1->type != IS_LONG) { + WRONG_PARAM_COUNT; + } + conn = (SQLH) (arg1->value.lval - 1); + if (!sqlTransactRollback(conn)) { + RETURN_FALSE; + } + RETURN_TRUE; } + /* }}} */ #if 0 /* {{{ proto int ovrimos_setoption(int conn_id|result_id, int which, int option, int value) Sets connection or statement options */ -PHP_FUNCTION(ovrimos_setoption) { +PHP_FUNCTION(ovrimos_setoption) +{ } + /* }}} */ #endif function_entry ovrimos_functions[] = { /* PHP_FE(ovrimos_setoption, NULL)*/ /* PHP_FE(ovrimos_autocommit, NULL)*/ - PHP_FE(ovrimos_close, NULL) - PHP_FE(ovrimos_close_all, NULL) - PHP_FE(ovrimos_commit, NULL) - PHP_FE(ovrimos_connect, NULL) - PHP_FE(ovrimos_cursor, NULL) - PHP_FE(ovrimos_exec, NULL) - PHP_FE(ovrimos_prepare, NULL) - PHP_FE(ovrimos_execute, NULL) - PHP_FE(ovrimos_fetch_row, NULL) - PHP_FE(ovrimos_fetch_into, NULL) - PHP_FE(ovrimos_field_len, NULL) - PHP_FE(ovrimos_field_name, NULL) - PHP_FE(ovrimos_field_type, NULL) - PHP_FE(ovrimos_field_num, NULL) - PHP_FE(ovrimos_free_result, NULL) - PHP_FE(ovrimos_num_fields, NULL) - PHP_FE(ovrimos_num_rows, NULL) - PHP_FE(ovrimos_result, NULL) - PHP_FE(ovrimos_result_all, NULL) - PHP_FE(ovrimos_rollback, NULL) + PHP_FE(ovrimos_close, NULL) + PHP_FE(ovrimos_close_all, NULL) + PHP_FE(ovrimos_commit, NULL) + PHP_FE(ovrimos_connect, NULL) + PHP_FE(ovrimos_cursor, NULL) + PHP_FE(ovrimos_exec, NULL) + PHP_FE(ovrimos_prepare, NULL) + PHP_FE(ovrimos_execute, NULL) + PHP_FE(ovrimos_fetch_row, NULL) + PHP_FE(ovrimos_fetch_into, NULL) + PHP_FE(ovrimos_field_len, NULL) + PHP_FE(ovrimos_field_name, NULL) + PHP_FE(ovrimos_field_type, NULL) + PHP_FE(ovrimos_field_num, NULL) + PHP_FE(ovrimos_free_result, NULL) + PHP_FE(ovrimos_num_fields, NULL) + PHP_FE(ovrimos_num_rows, NULL) + PHP_FE(ovrimos_result, NULL) + PHP_FE(ovrimos_result_all, NULL) + PHP_FE(ovrimos_rollback, NULL) /* PHP_FE(ovrimos_binmode, NULL)*/ - PHP_FE(ovrimos_longreadlen, NULL) - PHP_FALIAS(ovrimos_do, ovrimos_exec, NULL) - { NULL, NULL, NULL } + PHP_FE(ovrimos_longreadlen, NULL) + PHP_FALIAS(ovrimos_do, ovrimos_exec, NULL) {NULL, NULL, NULL} }; zend_module_entry ovrimos_module_entry = { - "Ovrimos", - ovrimos_functions, - NULL, - NULL, - NULL, - NULL, - PHP_MINFO(ovrimos), - STANDARD_MODULE_PROPERTIES + "Ovrimos", + ovrimos_functions, + NULL, + NULL, + NULL, + NULL, + PHP_MINFO(ovrimos), + STANDARD_MODULE_PROPERTIES }; -DLEXPORT zend_module_entry *get_module() { return &ovrimos_module_entry; }; +DLEXPORT zend_module_entry *get_module() +{ + return &ovrimos_module_entry; +}; |