Skip to content

Commit 8f9c41d

Browse files
committed
Fold HAVE_SQL_EXTENDED_FETCH
All supported driver managers can do extended fetches.
1 parent b4252e0 commit 8f9c41d

File tree

2 files changed

+10
-87
lines changed

2 files changed

+10
-87
lines changed

ext/odbc/php_odbc.c

Lines changed: 10 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -885,9 +885,7 @@ PHP_FUNCTION(odbc_prepare)
885885
odbc_result *result = NULL;
886886
RETCODE rc;
887887
int i;
888-
#ifdef HAVE_SQL_EXTENDED_FETCH
889888
SQLUINTEGER scrollopts;
890-
#endif
891889

892890
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &pv_conn, odbc_connection_ce, &query, &query_len) == FAILURE) {
893891
RETURN_THROWS();
@@ -915,9 +913,6 @@ PHP_FUNCTION(odbc_prepare)
915913
RETURN_FALSE;
916914
}
917915

918-
#ifdef HAVE_SQL_EXTENDED_FETCH
919-
/* Solid doesn't have ExtendedFetch, if DriverManager is used, get Info,
920-
whether Driver supports ExtendedFetch */
921916
rc = SQLGetInfo(conn->hdbc, SQL_FETCH_DIRECTION, (void *) &scrollopts, sizeof(scrollopts), NULL);
922917
if (rc == SQL_SUCCESS) {
923918
if ((result->fetch_abs = (scrollopts & SQL_FD_FETCH_ABSOLUTE))) {
@@ -929,7 +924,6 @@ PHP_FUNCTION(odbc_prepare)
929924
} else {
930925
result->fetch_abs = 0;
931926
}
932-
#endif
933927

934928
rc = SQLPrepare(result->stmt, (SQLCHAR *) query, SQL_NTS);
935929
switch (rc) {
@@ -1272,9 +1266,7 @@ PHP_FUNCTION(odbc_exec)
12721266
size_t query_len;
12731267
odbc_result *result = NULL;
12741268
RETCODE rc;
1275-
#ifdef HAVE_SQL_EXTENDED_FETCH
12761269
SQLUINTEGER scrollopts;
1277-
#endif
12781270

12791271
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &pv_conn, odbc_connection_ce, &query, &query_len) == FAILURE) {
12801272
RETURN_THROWS();
@@ -1299,9 +1291,6 @@ PHP_FUNCTION(odbc_exec)
12991291
RETURN_FALSE;
13001292
}
13011293

1302-
#ifdef HAVE_SQL_EXTENDED_FETCH
1303-
/* Solid doesn't have ExtendedFetch, if DriverManager is used, get Info,
1304-
whether Driver supports ExtendedFetch */
13051294
rc = SQLGetInfo(conn->hdbc, SQL_FETCH_DIRECTION, (void *) &scrollopts, sizeof(scrollopts), NULL);
13061295
if (rc == SQL_SUCCESS) {
13071296
if ((result->fetch_abs = (scrollopts & SQL_FD_FETCH_ABSOLUTE))) {
@@ -1313,7 +1302,6 @@ PHP_FUNCTION(odbc_exec)
13131302
} else {
13141303
result->fetch_abs = 0;
13151304
}
1316-
#endif
13171305

13181306
rc = SQLExecDirect(result->stmt, (SQLCHAR *) query, SQL_NTS);
13191307
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO && rc != SQL_NO_DATA_FOUND) {
@@ -1356,10 +1344,8 @@ static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
13561344
zend_long pv_row = 0;
13571345
bool pv_row_is_null = true;
13581346
zval *pv_res, tmp;
1359-
#ifdef HAVE_SQL_EXTENDED_FETCH
13601347
SQLULEN crow;
13611348
SQLUSMALLINT RowStatus[1];
1362-
#endif
13631349

13641350
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|l!", &pv_res, odbc_result_ce, &pv_row, &pv_row_is_null) == FAILURE) {
13651351
RETURN_THROWS();
@@ -1370,46 +1356,33 @@ static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
13701356

13711357
/* TODO deprecate $row argument values less than 1 after PHP 8.4 */
13721358

1373-
#ifndef HAVE_SQL_EXTENDED_FETCH
1374-
if (!pv_row_is_null && pv_row > 0) {
1375-
php_error_docref(NULL, E_WARNING, "Extended fetch functionality is not available, argument #3 ($row) is ignored");
1376-
}
1377-
#endif
1378-
13791359
if (result->numcols == 0) {
13801360
php_error_docref(NULL, E_WARNING, "No tuples available at this result index");
13811361
RETURN_FALSE;
13821362
}
13831363

1384-
#ifdef HAVE_SQL_EXTENDED_FETCH
13851364
if (result->fetch_abs) {
13861365
if (!pv_row_is_null && pv_row > 0) {
13871366
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_ABSOLUTE,(SQLLEN)pv_row,&crow,RowStatus);
13881367
} else {
13891368
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
13901369
}
1391-
} else
1392-
#endif
1393-
rc = SQLFetch(result->stmt);
1370+
} else {
1371+
rc = SQLFetch(result->stmt);
1372+
}
13941373

13951374
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
13961375
if (rc == SQL_ERROR) {
1397-
#ifdef HAVE_SQL_EXTENDED_FETCH
13981376
odbc_sql_error(result->conn_ptr, result->stmt, "SQLExtendedFetch");
1399-
#else
1400-
odbc_sql_error(result->conn_ptr, result->stmt, "SQLFetch");
1401-
#endif
14021377
}
14031378
RETURN_FALSE;
14041379
}
14051380

14061381
array_init(return_value);
14071382

1408-
#ifdef HAVE_SQL_EXTENDED_FETCH
14091383
if (!pv_row_is_null && pv_row > 0 && result->fetch_abs)
14101384
result->fetched = (SQLLEN)pv_row;
14111385
else
1412-
#endif
14131386
result->fetched++;
14141387

14151388
for(i = 0; i < result->numcols; i++) {
@@ -1523,10 +1496,8 @@ PHP_FUNCTION(odbc_fetch_into)
15231496
zval *pv_res, *pv_res_arr, tmp;
15241497
zend_long pv_row = 0;
15251498
bool pv_row_is_null = true;
1526-
#ifdef HAVE_SQL_EXTENDED_FETCH
15271499
SQLULEN crow;
15281500
SQLUSMALLINT RowStatus[1];
1529-
#endif /* HAVE_SQL_EXTENDED_FETCH */
15301501

15311502
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz|l!", &pv_res, odbc_result_ce, &pv_res_arr, &pv_row, &pv_row_is_null) == FAILURE) {
15321503
RETURN_THROWS();
@@ -1537,12 +1508,6 @@ PHP_FUNCTION(odbc_fetch_into)
15371508

15381509
/* TODO deprecate $row argument values less than 1 after PHP 8.4 */
15391510

1540-
#ifndef HAVE_SQL_EXTENDED_FETCH
1541-
if (!pv_row_is_null && pv_row > 0) {
1542-
php_error_docref(NULL, E_WARNING, "Extended fetch functionality is not available, argument #3 ($row) is ignored");
1543-
}
1544-
#endif
1545-
15461511
if (result->numcols == 0) {
15471512
php_error_docref(NULL, E_WARNING, "No tuples available at this result index");
15481513
RETURN_FALSE;
@@ -1553,33 +1518,26 @@ PHP_FUNCTION(odbc_fetch_into)
15531518
RETURN_THROWS();
15541519
}
15551520

1556-
#ifdef HAVE_SQL_EXTENDED_FETCH
15571521
if (result->fetch_abs) {
15581522
if (!pv_row_is_null && pv_row > 0) {
15591523
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_ABSOLUTE,(SQLLEN)pv_row,&crow,RowStatus);
15601524
} else {
15611525
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
15621526
}
1563-
} else
1564-
#endif
1527+
} else {
15651528
rc = SQLFetch(result->stmt);
1529+
}
15661530

15671531
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
15681532
if (rc == SQL_ERROR) {
1569-
#ifdef HAVE_SQL_EXTENDED_FETCH
15701533
odbc_sql_error(result->conn_ptr, result->stmt, "SQLExtendedFetch");
1571-
#else
1572-
odbc_sql_error(result->conn_ptr, result->stmt, "SQLFetch");
1573-
#endif
15741534
}
15751535
RETURN_FALSE;
15761536
}
15771537

1578-
#ifdef HAVE_SQL_EXTENDED_FETCH
15791538
if (!pv_row_is_null && pv_row > 0 && result->fetch_abs)
15801539
result->fetched = (SQLLEN)pv_row;
15811540
else
1582-
#endif
15831541
result->fetched++;
15841542

15851543
for(i = 0; i < result->numcols; i++) {
@@ -1659,10 +1617,8 @@ PHP_FUNCTION(odbc_fetch_row)
16591617
zval *pv_res;
16601618
zend_long pv_row = 0;
16611619
bool pv_row_is_null = true;
1662-
#ifdef HAVE_SQL_EXTENDED_FETCH
16631620
SQLULEN crow;
16641621
SQLUSMALLINT RowStatus[1];
1665-
#endif
16661622

16671623
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|l!", &pv_res, odbc_result_ce, &pv_row, &pv_row_is_null) == FAILURE) {
16681624
RETURN_THROWS();
@@ -1671,50 +1627,38 @@ PHP_FUNCTION(odbc_fetch_row)
16711627
result = Z_ODBC_RESULT_P(pv_res);
16721628
CHECK_ODBC_RESULT(result);
16731629

1674-
#ifndef HAVE_SQL_EXTENDED_FETCH
1675-
if (!pv_row_is_null) {
1676-
php_error_docref(NULL, E_WARNING, "Extended fetch functionality is not available, argument #3 ($row) is ignored");
1677-
}
1678-
#else
16791630
if (!pv_row_is_null && pv_row < 1) {
16801631
php_error_docref(NULL, E_WARNING, "Argument #3 ($row) must be greater than or equal to 1");
16811632
RETURN_FALSE;
16821633
}
1683-
#endif
16841634

16851635
if (result->numcols == 0) {
16861636
php_error_docref(NULL, E_WARNING, "No tuples available at this result index");
16871637
RETURN_FALSE;
16881638
}
16891639

1690-
#ifdef HAVE_SQL_EXTENDED_FETCH
16911640
if (result->fetch_abs) {
16921641
if (!pv_row_is_null) {
16931642
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_ABSOLUTE,(SQLLEN)pv_row,&crow,RowStatus);
16941643
} else {
16951644
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
16961645
}
1697-
} else
1698-
#endif
1646+
} else {
16991647
rc = SQLFetch(result->stmt);
1648+
}
17001649

17011650
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
17021651
if (rc == SQL_ERROR) {
1703-
#ifdef HAVE_SQL_EXTENDED_FETCH
17041652
odbc_sql_error(result->conn_ptr, result->stmt, "SQLExtendedFetch");
1705-
#else
1706-
odbc_sql_error(result->conn_ptr, result->stmt, "SQLFetch");
1707-
#endif
17081653
}
17091654
RETURN_FALSE;
17101655
}
17111656

1712-
#ifdef HAVE_SQL_EXTENDED_FETCH
17131657
if (!pv_row_is_null) {
17141658
result->fetched = (SQLLEN)pv_row;
1715-
} else
1716-
#endif
1659+
} else {
17171660
result->fetched++;
1661+
}
17181662

17191663
RETURN_TRUE;
17201664
}
@@ -1733,10 +1677,8 @@ PHP_FUNCTION(odbc_result)
17331677
RETCODE rc;
17341678
SQLLEN fieldsize;
17351679
zval *pv_res;
1736-
#ifdef HAVE_SQL_EXTENDED_FETCH
17371680
SQLULEN crow;
17381681
SQLUSMALLINT RowStatus[1];
1739-
#endif
17401682

17411683
ZEND_PARSE_PARAMETERS_START(2, 2)
17421684
Z_PARAM_OBJECT_OF_CLASS(pv_res, odbc_result_ce)
@@ -1787,20 +1729,14 @@ PHP_FUNCTION(odbc_result)
17871729

17881730
if (result->fetched == 0) {
17891731
/* User forgot to call odbc_fetch_row(), or wants to reload the results, do it now */
1790-
#ifdef HAVE_SQL_EXTENDED_FETCH
17911732
if (result->fetch_abs)
17921733
rc = SQLExtendedFetch(result->stmt, SQL_FETCH_NEXT, 1, &crow,RowStatus);
17931734
else
1794-
#endif
17951735
rc = SQLFetch(result->stmt);
17961736

17971737
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
17981738
if (rc == SQL_ERROR) {
1799-
#ifdef HAVE_SQL_EXTENDED_FETCH
1800-
odbc_sql_error(result->conn_ptr, result->stmt, "SQLExtendedFetch");
1801-
#else
1802-
odbc_sql_error(result->conn_ptr, result->stmt, "SQLFetch");
1803-
#endif
1739+
odbc_sql_error(result->conn_ptr, result->stmt, "SQLExtendedFetch");
18041740
}
18051741
RETURN_FALSE;
18061742
}
@@ -1948,10 +1884,8 @@ PHP_FUNCTION(odbc_result_all)
19481884
char *pv_format = NULL;
19491885
size_t i, pv_format_len = 0;
19501886
SQLSMALLINT sql_c_type;
1951-
#ifdef HAVE_SQL_EXTENDED_FETCH
19521887
SQLULEN crow;
19531888
SQLUSMALLINT RowStatus[1];
1954-
#endif
19551889

19561890
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|s", &pv_res, odbc_result_ce, &pv_format, &pv_format_len) == FAILURE) {
19571891
RETURN_THROWS();
@@ -1964,11 +1898,9 @@ PHP_FUNCTION(odbc_result_all)
19641898
php_error_docref(NULL, E_WARNING, "No tuples available at this result index");
19651899
RETURN_FALSE;
19661900
}
1967-
#ifdef HAVE_SQL_EXTENDED_FETCH
19681901
if (result->fetch_abs)
19691902
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
19701903
else
1971-
#endif
19721904
rc = SQLFetch(result->stmt);
19731905

19741906
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
@@ -2066,11 +1998,9 @@ PHP_FUNCTION(odbc_result_all)
20661998
}
20671999
php_printf("</tr>\n");
20682000

2069-
#ifdef HAVE_SQL_EXTENDED_FETCH
20702001
if (result->fetch_abs)
20712002
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
20722003
else
2073-
#endif
20742004
rc = SQLFetch(result->stmt);
20752005
}
20762006
php_printf("</table>\n");

ext/odbc/php_odbc_includes.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
#include <sql.h>
3838
#include <sqlext.h>
3939
#include <iodbcext.h>
40-
#define HAVE_SQL_EXTENDED_FETCH 1
4140

4241
#elif defined(HAVE_UNIXODBC) /* unixODBC library */
4342

@@ -53,23 +52,19 @@
5352
#undef ODBCVER
5453
#include <sql.h>
5554
#include <sqlext.h>
56-
#define HAVE_SQL_EXTENDED_FETCH 1
5755

5856
#elif defined(HAVE_CODBC) /* Custom ODBC */
5957

6058
#define ODBC_TYPE "Custom ODBC"
61-
#define HAVE_SQL_EXTENDED_FETCH 1
6259
#include <odbc.h>
6360

6461
#elif defined(HAVE_IBMDB2) /* DB2 CLI */
6562

6663
#define ODBC_TYPE "IBM DB2 CLI"
67-
#define HAVE_SQL_EXTENDED_FETCH 1
6864
#include <sqlcli1.h>
6965

7066
#else /* MS ODBC */
7167

72-
#define HAVE_SQL_EXTENDED_FETCH 1
7368
#include <WINDOWS.H>
7469
#include <sql.h>
7570
#include <sqlext.h>
@@ -129,9 +124,7 @@ typedef struct odbc_result {
129124
odbc_result_value *values;
130125
SQLSMALLINT numcols;
131126
SQLSMALLINT numparams;
132-
# ifdef HAVE_SQL_EXTENDED_FETCH
133127
int fetch_abs;
134-
# endif
135128
zend_long longreadlen;
136129
int binmode;
137130
int fetched;

0 commit comments

Comments
 (0)