Date: 11/11/00
- Next message: Alexander Barkov: "[PHP-DEV] Rasmus"
- Previous message: mookid <email protected>: "[PHP-DEV] PHP 4.0 Bug #7133: xml_set_object() should not copy the object"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
The patch I sent 2 days ago had a bug.
Forgive me my late-night dislexia :)
If you're going to use it, use this one.
-- Best regards, Max A. Derkachev mailto:kot <email protected> Symbol-Plus Publishing Ltd. phone: +7 (812) 265-0054, 265-1228, phone/fax: 567-8775 http://www.Books.Ru -- All Books of Russia
*** php_interbase.h.orig Fri Oct 6 12:02:05 2000 --- php_interbase.h Sat Nov 11 15:55:05 2000 *************** *** 45,48 **** --- 45,49 ---- PHP_FUNCTION(ibase_close); PHP_FUNCTION(ibase_query); + PHP_FUNCTION(ibase_affected_rows); PHP_FUNCTION(ibase_fetch_row); PHP_FUNCTION(ibase_fetch_object); *************** *** 83,86 **** --- 84,88 ---- long max_links, max_persistent; long allow_persistent; + long affected_rows; int le_blob, le_link, le_plink, le_result, le_query, le_trans; char *default_user, *default_password; *************** *** 157,161 **** PHP_IBASE_TIMESTAMP = 64, PHP_IBASE_DATE = 128, ! PHP_IBASE_TIME = 256 }; --- 159,164 ---- PHP_IBASE_TIMESTAMP = 64, PHP_IBASE_DATE = 128, ! PHP_IBASE_TIME = 256, ! PHP_IBASE_REC_V = 512 }; *** interbase.c.orig Fri Oct 6 12:01:58 2000 --- interbase.c Sat Nov 11 15:54:45 2000 *************** *** 34,37 **** --- 34,49 ---- rfinish could be called repeatedly emalloc & co. replaced with malloc & co. + 2000-10-06: Maxim Derkachev <kot <email protected>> + - added int _php_ibase_affected_rows() + (used by ibase_affected_rows()). + 2000-10-10: Maxim Derkachev <kot <email protected>> + - added php function ibase_affected_rows(), + it returns affected rows in case of + INSERT, UPDATE & DELETE queries. + - added global constant PHP_IBASE_REC_V, + and it's use in ibase_trans(), so if + 'READ COMMITED' is a transaction parameter, + one can also define 'RECORD VERSION' (or 'NO + RECORD VERSION') transaction parameter. */ *************** *** 69,72 **** --- 81,85 ---- PHP_FE(ibase_close, NULL) PHP_FE(ibase_query, NULL) + PHP_FE(ibase_affected_rows, NULL) PHP_FE(ibase_fetch_row, NULL) PHP_FE(ibase_fetch_object, NULL) *************** *** 509,512 **** --- 522,526 ---- REGISTER_LONG_CONSTANT("IBASE_DATE", PHP_IBASE_DATE, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IBASE_TIME", PHP_IBASE_TIME, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("IBASE_REC_V", PHP_IBASE_REC_V, CONST_PERSISTENT); return SUCCESS; *************** *** 1487,1490 **** --- 1501,1507 ---- if (trans_argl & PHP_IBASE_COMMITTED) { tpb[tpb_len++] = isc_tpb_read_committed; + if (trans_argl & PHP_IBASE_REC_V) + tpb[tpb_len++] = isc_tpb_rec_version; + else tpb[tpb_len++] = isc_tpb_no_rec_version; } else if (trans_argl & PHP_IBASE_CONSISTENCY) tpb[tpb_len++] = isc_tpb_consistency; *************** *** 1611,1614 **** --- 1628,1697 ---- /* }}} */ + /* int _php_ibase_affected_rows(ibase_query *ib_query) + get affected rows */ + static int _php_ibase_affected_rows ( ibase_query *ib_query ) + { + int statement_type; + int length; + char type_item[] = {isc_info_sql_stmt_type}; + char info_records[] = {isc_info_sql_records}; + char res_buffer[1024]; + long aff_rows; + IBLS_FETCH(); + + isc_dsql_sql_info( + IB_STATUS, + &ib_query->stmt, + 1, + type_item, + sizeof(res_buffer), + res_buffer); + + if (IB_STATUS[0] && IB_STATUS[1]) { /* error in fetch */ + _php_ibase_error(); + return -1; + } + + if (res_buffer[0] == isc_info_sql_stmt_type) + { + length = isc_vax_integer(&res_buffer[1], 2); + statement_type = isc_vax_integer(&res_buffer[3], length); + } + else { + return -1; + } + + isc_dsql_sql_info( + IB_STATUS, + &ib_query->stmt, + 1, + info_records, + sizeof(res_buffer), + res_buffer); + + if (IB_STATUS[0] && IB_STATUS[1]) { /* error in fetch */ + _php_ibase_error(); + return -1; + } + + switch (statement_type) { + case 2: // insert + aff_rows = isc_vax_integer(&res_buffer[27], 4); + break; + case 3: // update + aff_rows = isc_vax_integer(&res_buffer[6], 4); + break; + case 4: // delete + aff_rows = isc_vax_integer(&res_buffer[13], 4); + break; + default: // n/a + aff_rows = -1; + break; + } + + return aff_rows; + } + /* }}} */ + /* {{{ proto int ibase_query([int link_identifier,] string query [, int bind_args]) *************** *** 1686,1691 **** --- 1769,1776 ---- ib_query->stmt = NULL; /* keep stmt when free query */ _php_ibase_free_query(ib_query); + IBG(affected_rows) = 0; ZEND_REGISTER_RESOURCE(return_value, ib_result, IBG(le_result)); } else { + IBG(affected_rows) = _php_ibase_affected_rows(ib_query); _php_ibase_free_query(ib_query); RETURN_TRUE; *************** *** 1693,1697 **** --- 1778,1793 ---- } /* }}} */ + /* proto int ibase_affected_rows() + return affected rows of the last insert, update or delete + */ + PHP_FUNCTION(ibase_affected_rows) { + IBLS_FETCH(); + if (IBG(affected_rows)) { + RETURN_LONG(IBG(affected_rows)); + } + RETURN_FALSE; + } + /* }}} */ /* {{{ _php_ibase_var_pval() */
-- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: php-dev-unsubscribe <email protected> For additional commands, e-mail: php-dev-help <email protected> To contact the list administrators, e-mail: php-list-admin <email protected>
- Next message: Alexander Barkov: "[PHP-DEV] Rasmus"
- Previous message: mookid <email protected>: "[PHP-DEV] PHP 4.0 Bug #7133: xml_set_object() should not copy the object"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

