diff options
Diffstat (limited to 'ext/ovrimos/ovrimos.c')
-rw-r--r-- | ext/ovrimos/ovrimos.c | 1101 |
1 files changed, 0 insertions, 1101 deletions
diff --git a/ext/ovrimos/ovrimos.c b/ext/ovrimos/ovrimos.c deleted file mode 100644 index 08bb341872..0000000000 --- a/ext/ovrimos/ovrimos.c +++ /dev/null @@ -1,1101 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2001 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> | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#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 void column_to_string(SQLS stmt, int i, char *buffer, int *len); - -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); -} - -/* }}} */ - -/* {{{ 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); -} - -/* }}} */ - -/* {{{ proto void ovrimos_close_all() - Close all connections */ -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; -} - -/* }}} */ - -/* {{{ 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); -} - -/* }}} */ - -/* - * Execute prepared SQL statement. Supports only input parameters. - */ -/* {{{ 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; -} - -/* }}} */ - -/* {{{ 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); -} - -/* }}} */ - -/* {{{ 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); -} - -/* }}} */ - -/* {{{ column_to_string - */ -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; -} - -/* }}} */ - -/* {{{ 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; -} - -/* }}} */ - -/* {{{ 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); -} - -/* }}} */ - -/* {{{ 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); -} - -/* }}} */ - -/* {{{ 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; -} - -/* }}} */ - -/* {{{ 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; - - if (getParameters(ht, 1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - convert_to_long(arg1); - stmt = (SQLS) (arg1->value.lval - 1); - - 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; - - if (getParameters(ht, 1, &arg1) == FAILURE) { - WRONG_PARAM_COUNT; - } - - convert_to_long(arg1); - stmt = (SQLS) (arg1->value.lval - 1); - - 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); -} - -/* }}} */ - -/* {{{ 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)); -} - -/* }}} */ - -/* {{{ 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)); - } -} - -/* }}} */ - -/* {{{ 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; -} - -/* }}} */ - -#if 0 -/* {{{ proto int ovrimos_autocommit(int connection_id, int OnOff) - Toggle autocommit mode - There can be problems with pconnections!*/ -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; -} - -/* }}} */ - -/* {{{ 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; -} - -/* }}} */ - -#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) -{ -} - -/* }}} */ -#endif - -/* {{{ ovrimos_functions[] - */ -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_binmode, 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 -}; - -DLEXPORT zend_module_entry *get_module() -{ - return &ovrimos_module_entry; -}; - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 tw=78 fdm=marker - * vim<600: sw=4 ts=4 tw=78 - */ |