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

Reply via email to