fmk Tue Aug 24 13:59:01 2004 EDT Modified files: /php-src/ext/fbsql php_fbsql.c php_fbsql.h Log: Add fbsql_rows_fetched() - returns the total number of rows fetched. Fix a possible crash in fbsql_database() if the function was called before a connection was made.
http://cvs.php.net/diff.php/php-src/ext/fbsql/php_fbsql.c?r1=1.105&r2=1.106&ty=u Index: php-src/ext/fbsql/php_fbsql.c diff -u php-src/ext/fbsql/php_fbsql.c:1.105 php-src/ext/fbsql/php_fbsql.c:1.106 --- php-src/ext/fbsql/php_fbsql.c:1.105 Fri Feb 27 18:03:07 2004 +++ php-src/ext/fbsql/php_fbsql.c Tue Aug 24 13:59:01 2004 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_fbsql.c,v 1.105 2004/02/27 23:03:07 fmk Exp $ */ +/* $Id: php_fbsql.c,v 1.106 2004/08/24 17:59:01 fmk Exp $ */ /* TODO: * @@ -201,6 +201,7 @@ PHP_FE(fbsql_error, NULL) PHP_FE(fbsql_errno, NULL) PHP_FE(fbsql_affected_rows, NULL) + PHP_FE(fbsql_rows_fetched, NULL) PHP_FE(fbsql_insert_id, NULL) PHP_FE(fbsql_result, NULL) PHP_FE(fbsql_next_result, NULL) @@ -297,9 +298,9 @@ fbcmdRelease(md); } if (result->rowHandler) fbcrhRelease(result->rowHandler); - if (result->ResultmetaData) fbcmdRelease(result->ResultmetaData); if (result->list) fbcplRelease(result->list); if (result->array) fbaRelease(result->array); + if (result->ResultmetaData) fbcmdRelease(result->ResultmetaData); efree(result); } } @@ -369,7 +370,7 @@ } -static void phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link); +static void phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link, long batch_size); /* {{{ PHP_INI */ @@ -381,7 +382,7 @@ STD_PHP_INI_ENTRY_EX ("fbsql.max_links", "128", PHP_INI_SYSTEM, OnUpdateLong, maxLinks, zend_fbsql_globals, fbsql_globals, display_link_numbers) STD_PHP_INI_ENTRY_EX ("fbsql.max_connections", "128", PHP_INI_SYSTEM, OnUpdateLong, maxConnections, zend_fbsql_globals, fbsql_globals, display_link_numbers) STD_PHP_INI_ENTRY_EX ("fbsql.max_results", "128", PHP_INI_SYSTEM, OnUpdateLong, maxResults, zend_fbsql_globals, fbsql_globals, display_link_numbers) - STD_PHP_INI_ENTRY_EX ("fbsql.batchSize", "1000", PHP_INI_SYSTEM, OnUpdateLong, batchSize, zend_fbsql_globals, fbsql_globals, display_link_numbers) + STD_PHP_INI_ENTRY_EX ("fbsql.batchsize", "1000", PHP_INI_USER, OnUpdateLong, batchSize, zend_fbsql_globals, fbsql_globals, display_link_numbers) STD_PHP_INI_ENTRY ("fbsql.default_host", NULL, PHP_INI_SYSTEM, OnUpdateString, hostName, zend_fbsql_globals, fbsql_globals) STD_PHP_INI_ENTRY ("fbsql.default_user", "_SYSTEM", PHP_INI_SYSTEM, OnUpdateString, userName, zend_fbsql_globals, fbsql_globals) STD_PHP_INI_ENTRY ("fbsql.default_password", "", PHP_INI_SYSTEM, OnUpdateString, userPassword, zend_fbsql_globals, fbsql_globals) @@ -650,8 +651,9 @@ if (result->rowHandler == NULL) { void *rawData = fbcdcFetch(result->link->connection, result->batchSize, result->fetchHandle); - if (rawData == NULL) + if (rawData == NULL) { result->rowCount = 0; + } else result->rowHandler = fbcrhInitWith(rawData, result->metaData); } @@ -767,7 +769,7 @@ php_error_docref(NULL TSRMLS_CC, E_WARNING, "No message"); } link->errorText = strdup(emg); - link->errorNo = fbcemdErrorCodeAtIndex(emd, 0);; + link->errorNo = fbcemdErrorCodeAtIndex(emd, 0); free(emg); fbcemdRelease(emd); fbcmdRelease(md); @@ -1231,7 +1233,12 @@ if (phpLink->databaseName) free(phpLink->databaseName); phpLink->databaseName = strdup(Z_STRVAL_PP(dbname)); } - RETURN_STRING(phpLink->databaseName, 1); + if (phpLink->databaseName) { + RETURN_STRING(phpLink->databaseName, 1); + } + else { + RETURN_FALSE; + } } /* }}} */ @@ -1474,7 +1481,7 @@ sprintf(buffer, "SET AUTHORIZATION %s;", userName); - phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, buffer, phpLink); + phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, buffer, phpLink, 0); if (Z_LVAL_P(return_value)) { free(phpLink->userName); @@ -1488,10 +1495,10 @@ PHP_FUNCTION(fbsql_create_db) { PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **database_name; + zval **fbsql_link_index = NULL, **database_name, **database_options = NULL; int id; int i, status; - char *databaseName; + char *databaseName, *databaseOptions; switch (ZEND_NUM_ARGS()) { case 1: @@ -1507,6 +1514,14 @@ } id = -1; break; + case 3: + if (zend_get_parameters_ex(3, &database_name, &fbsql_link_index, &database_options)==FAILURE) { + RETURN_FALSE; + } + id = -1; + convert_to_string_ex(database_options); + databaseOptions = Z_STRVAL_PP(database_options); + break; default: WRONG_PARAM_COUNT; break; @@ -1530,7 +1545,7 @@ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create [EMAIL PROTECTED], database is %s", databaseName, phpLink->hostName, txt); RETURN_FALSE; } - if (!fbcehCreateDatabaseNamedWithOptions(phpLink->execHandler, databaseName, "")) + if (!fbcehCreateDatabaseNamedWithOptions(phpLink->execHandler, databaseName, databaseOptions)) { char* error = fbechErrorMessage(phpLink->execHandler); if (FB_SQL_G(generateWarnings)) @@ -1632,15 +1647,15 @@ } /* }}} */ -/* {{{ proto bool fbsql_start_db(string database_name [, resource link_identifier]) +/* {{{ proto bool fbsql_start_db(string database_name [, resource link_identifier [, string database_options]]) Start a database on the server */ PHP_FUNCTION(fbsql_start_db) { PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **database_name; + zval **fbsql_link_index = NULL, **database_name, **database_options; int id; int i, status; - char *databaseName; + char *databaseName, *databaseOptions = NULL; switch (ZEND_NUM_ARGS()) { case 1: @@ -1656,6 +1671,14 @@ } id = -1; break; + case 3: + if (zend_get_parameters_ex(3, &database_name, &fbsql_link_index, &database_options)==FAILURE) { + RETURN_FALSE; + } + id = -1; + convert_to_string_ex(database_options); + databaseOptions = Z_STRVAL_PP(database_options); + break; default: WRONG_PARAM_COUNT; break; @@ -1682,7 +1705,7 @@ if (status == FBStopped) { - if (!fbcehStartDatabaseNamed (phpLink->execHandler, databaseName)) + if (!fbcehStartDatabaseNamedWithOptions(phpLink->execHandler, databaseName, databaseOptions)) { char* error = fbechErrorMessage(phpLink->execHandler); if (FB_SQL_G(generateWarnings)) @@ -1855,12 +1878,12 @@ } /* }}} */ -static void phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link) +static void phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link, long batch_size) { PHPFBResult* result = NULL; FBCMetaData* md, *meta; char* tp; - char* fh; + char* fh = NULL; unsigned int sR = 1, cR = 0; meta = fbcdcExecuteDirectSQL(link->connection, sql); @@ -1887,13 +1910,13 @@ } else if ((fh = fbcmdFetchHandle(md)) || tp[0] == 'E' || (tp[0] == 'U' && fh)) { - result = emalloc(sizeof(PHPFBResult)); + result = (PHPFBResult *)emalloc(sizeof(PHPFBResult)); result->link = link; - result->fetchHandle = fh; + result->rowHandler = NULL; + result->fetchHandle = NULL; result->ResultmetaData = meta; result->metaData = md; - result->rowHandler = NULL; - result->batchSize = FB_SQL_G(batchSize); + result->batchSize = batch_size > 0 ? batch_size : FB_SQL_G(batchSize); result->rowCount = 0x7fffffff; result->columnCount = 0; result->rowIndex = 0; @@ -1909,7 +1932,6 @@ { result->columnCount = fbcmdColumnCount(md); result->fetchHandle = fh; - result->batchSize = FB_SQL_G(batchSize); } else { @@ -1938,13 +1960,13 @@ } } -/* {{{ proto resource fbsql_query(string query [, resource link_identifier]) +/* {{{ proto resource fbsql_query(string query [, resource link_identifier [, long batch_size]]) Send one or more SQL statements to the server and execute them */ PHP_FUNCTION(fbsql_query) { PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **query; - int id; + zval **fbsql_link_index = NULL, **query, **batch_size; + int id, bs = 0; switch (ZEND_NUM_ARGS()) { case 1: @@ -1960,6 +1982,14 @@ } id = -1; break; + case 3: + if (zend_get_parameters_ex(3, &query, &fbsql_link_index, &batch_size)==FAILURE) { + RETURN_FALSE; + } + id = -1; + convert_to_long_ex(batch_size); + bs = Z_LVAL_PP(batch_size); + break; default: WRONG_PARAM_COUNT; break; @@ -1968,7 +1998,7 @@ convert_to_string_ex(query); - phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink); + phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink, bs); } /* }}} */ @@ -2004,7 +2034,7 @@ convert_to_string_ex(dbname); if (php_fbsql_select_db(Z_STRVAL_PP(dbname), phpLink TSRMLS_CC)) { - phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink); + phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink, 0); } else { RETURN_FALSE; } @@ -2096,7 +2126,7 @@ php_fbsql_select_db(databaseName, phpLink TSRMLS_CC); } - phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink); + phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink, 0); } /* }}} */ @@ -2141,7 +2171,7 @@ sprintf(sql, "SELECT * FROM %s WHERE 1=0;", tableName); - phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink); + phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink, 0); } /* }}} */ @@ -2252,6 +2282,36 @@ ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); RETURN_LONG(phpLink->affectedRows); +} +/* }}} */ + +/* {{{ proto int fbsql_affected_rows([resource link_identifier]) + Get the number of rows affected by the last statement */ +PHP_FUNCTION(fbsql_rows_fetched) +{ + PHPFBResult* phpResult = NULL; + zval **result = NULL; + int id; + + switch (ZEND_NUM_ARGS()) { + case 1: + if (zend_get_parameters_ex(1, &result)==FAILURE) { + RETURN_FALSE; + } + id = -1; + break; + default: + WRONG_PARAM_COUNT; + break; + } + ZEND_FETCH_RESOURCE(phpResult, PHPFBResult *, result, id, "FrontBase-Result", le_result); + + if (!phpResult->rowHandler) { + RETURN_FALSE; + } + else { + RETURN_LONG(fbcrhRowCount(phpResult->rowHandler)); + } } /* }}} */ http://cvs.php.net/diff.php/php-src/ext/fbsql/php_fbsql.h?r1=1.28&r2=1.29&ty=u Index: php-src/ext/fbsql/php_fbsql.h diff -u php-src/ext/fbsql/php_fbsql.h:1.28 php-src/ext/fbsql/php_fbsql.h:1.29 --- php-src/ext/fbsql/php_fbsql.h:1.28 Thu Feb 26 15:31:14 2004 +++ php-src/ext/fbsql/php_fbsql.h Tue Aug 24 13:59:01 2004 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_fbsql.h,v 1.28 2004/02/26 20:31:14 fmk Exp $ */ +/* $Id: php_fbsql.h,v 1.29 2004/08/24 17:59:01 fmk Exp $ */ #define HAVE_FBSQL 1 @@ -57,6 +57,7 @@ PHP_FUNCTION(fbsql_error); PHP_FUNCTION(fbsql_errno); PHP_FUNCTION(fbsql_affected_rows); +PHP_FUNCTION(fbsql_rows_fetched); PHP_FUNCTION(fbsql_insert_id); PHP_FUNCTION(fbsql_result); PHP_FUNCTION(fbsql_next_result);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php