Skip to content

Commit ddceb67

Browse files
committed
Fold HAVE_SQL_EXTENDED_FETCH
All supported driver managers can do extended fetches.
1 parent 41e8422 commit ddceb67

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
@@ -886,9 +886,7 @@ PHP_FUNCTION(odbc_prepare)
886886
odbc_result *result = NULL;
887887
RETCODE rc;
888888
int i;
889-
#ifdef HAVE_SQL_EXTENDED_FETCH
890889
SQLUINTEGER scrollopts;
891-
#endif
892890

893891
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &pv_conn, odbc_connection_ce, &query, &query_len) == FAILURE) {
894892
RETURN_THROWS();
@@ -916,9 +914,6 @@ PHP_FUNCTION(odbc_prepare)
916914
RETURN_FALSE;
917915
}
918916

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

935929
rc = SQLPrepare(result->stmt, (SQLCHAR *) query, SQL_NTS);
936930
switch (rc) {
@@ -1274,9 +1268,7 @@ PHP_FUNCTION(odbc_exec)
12741268
size_t query_len;
12751269
odbc_result *result = NULL;
12761270
RETCODE rc;
1277-
#ifdef HAVE_SQL_EXTENDED_FETCH
12781271
SQLUINTEGER scrollopts;
1279-
#endif
12801272

12811273
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &pv_conn, odbc_connection_ce, &query, &query_len) == FAILURE) {
12821274
RETURN_THROWS();
@@ -1301,9 +1293,6 @@ PHP_FUNCTION(odbc_exec)
13011293
RETURN_FALSE;
13021294
}
13031295

1304-
#ifdef HAVE_SQL_EXTENDED_FETCH
1305-
/* Solid doesn't have ExtendedFetch, if DriverManager is used, get Info,
1306-
whether Driver supports ExtendedFetch */
13071296
rc = SQLGetInfo(conn->hdbc, SQL_FETCH_DIRECTION, (void *) &scrollopts, sizeof(scrollopts), NULL);
13081297
if (rc == SQL_SUCCESS) {
13091298
if ((result->fetch_abs = (scrollopts & SQL_FD_FETCH_ABSOLUTE))) {
@@ -1315,7 +1304,6 @@ PHP_FUNCTION(odbc_exec)
13151304
} else {
13161305
result->fetch_abs = 0;
13171306
}
1318-
#endif
13191307

13201308
rc = SQLExecDirect(result->stmt, (SQLCHAR *) query, SQL_NTS);
13211309
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO && rc != SQL_NO_DATA_FOUND) {
@@ -1358,10 +1346,8 @@ static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
13581346
zend_long pv_row = 0;
13591347
bool pv_row_is_null = true;
13601348
zval *pv_res, tmp;
1361-
#ifdef HAVE_SQL_EXTENDED_FETCH
13621349
SQLULEN crow;
13631350
SQLUSMALLINT RowStatus[1];
1364-
#endif
13651351

13661352
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|l!", &pv_res, odbc_result_ce, &pv_row, &pv_row_is_null) == FAILURE) {
13671353
RETURN_THROWS();
@@ -1372,46 +1358,33 @@ static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
13721358

13731359
/* TODO deprecate $row argument values less than 1 after PHP 8.4 */
13741360

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

1386-
#ifdef HAVE_SQL_EXTENDED_FETCH
13871366
if (result->fetch_abs) {
13881367
if (!pv_row_is_null && pv_row > 0) {
13891368
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_ABSOLUTE,(SQLLEN)pv_row,&crow,RowStatus);
13901369
} else {
13911370
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
13921371
}
1393-
} else
1394-
#endif
1395-
rc = SQLFetch(result->stmt);
1372+
} else {
1373+
rc = SQLFetch(result->stmt);
1374+
}
13961375

13971376
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
13981377
if (rc == SQL_ERROR) {
1399-
#ifdef HAVE_SQL_EXTENDED_FETCH
14001378
odbc_sql_error(result->conn_ptr, result->stmt, "SQLExtendedFetch");
1401-
#else
1402-
odbc_sql_error(result->conn_ptr, result->stmt, "SQLFetch");
1403-
#endif
14041379
}
14051380
RETURN_FALSE;
14061381
}
14071382

14081383
array_init(return_value);
14091384

1410-
#ifdef HAVE_SQL_EXTENDED_FETCH
14111385
if (!pv_row_is_null && pv_row > 0 && result->fetch_abs)
14121386
result->fetched = (SQLLEN)pv_row;
14131387
else
1414-
#endif
14151388
result->fetched++;
14161389

14171390
for(i = 0; i < result->numcols; i++) {
@@ -1524,10 +1497,8 @@ PHP_FUNCTION(odbc_fetch_into)
15241497
zval *pv_res, *pv_res_arr, tmp;
15251498
zend_long pv_row = 0;
15261499
bool pv_row_is_null = true;
1527-
#ifdef HAVE_SQL_EXTENDED_FETCH
15281500
SQLULEN crow;
15291501
SQLUSMALLINT RowStatus[1];
1530-
#endif /* HAVE_SQL_EXTENDED_FETCH */
15311502

15321503
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz|l!", &pv_res, odbc_result_ce, &pv_res_arr, &pv_row, &pv_row_is_null) == FAILURE) {
15331504
RETURN_THROWS();
@@ -1538,12 +1509,6 @@ PHP_FUNCTION(odbc_fetch_into)
15381509

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

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

1557-
#ifdef HAVE_SQL_EXTENDED_FETCH
15581522
if (result->fetch_abs) {
15591523
if (!pv_row_is_null && pv_row > 0) {
15601524
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_ABSOLUTE,(SQLLEN)pv_row,&crow,RowStatus);
15611525
} else {
15621526
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
15631527
}
1564-
} else
1565-
#endif
1528+
} else {
15661529
rc = SQLFetch(result->stmt);
1530+
}
15671531

15681532
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
15691533
if (rc == SQL_ERROR) {
1570-
#ifdef HAVE_SQL_EXTENDED_FETCH
15711534
odbc_sql_error(result->conn_ptr, result->stmt, "SQLExtendedFetch");
1572-
#else
1573-
odbc_sql_error(result->conn_ptr, result->stmt, "SQLFetch");
1574-
#endif
15751535
}
15761536
RETURN_FALSE;
15771537
}
15781538

1579-
#ifdef HAVE_SQL_EXTENDED_FETCH
15801539
if (!pv_row_is_null && pv_row > 0 && result->fetch_abs)
15811540
result->fetched = (SQLLEN)pv_row;
15821541
else
1583-
#endif
15841542
result->fetched++;
15851543

15861544
for(i = 0; i < result->numcols; i++) {
@@ -1660,10 +1618,8 @@ PHP_FUNCTION(odbc_fetch_row)
16601618
zval *pv_res;
16611619
zend_long pv_row = 0;
16621620
bool pv_row_is_null = true;
1663-
#ifdef HAVE_SQL_EXTENDED_FETCH
16641621
SQLULEN crow;
16651622
SQLUSMALLINT RowStatus[1];
1666-
#endif
16671623

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

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

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

1691-
#ifdef HAVE_SQL_EXTENDED_FETCH
16921641
if (result->fetch_abs) {
16931642
if (!pv_row_is_null) {
16941643
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_ABSOLUTE,(SQLLEN)pv_row,&crow,RowStatus);
16951644
} else {
16961645
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
16971646
}
1698-
} else
1699-
#endif
1647+
} else {
17001648
rc = SQLFetch(result->stmt);
1649+
}
17011650

17021651
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
17031652
if (rc == SQL_ERROR) {
1704-
#ifdef HAVE_SQL_EXTENDED_FETCH
17051653
odbc_sql_error(result->conn_ptr, result->stmt, "SQLExtendedFetch");
1706-
#else
1707-
odbc_sql_error(result->conn_ptr, result->stmt, "SQLFetch");
1708-
#endif
17091654
}
17101655
RETURN_FALSE;
17111656
}
17121657

1713-
#ifdef HAVE_SQL_EXTENDED_FETCH
17141658
if (!pv_row_is_null) {
17151659
result->fetched = (SQLLEN)pv_row;
1716-
} else
1717-
#endif
1660+
} else {
17181661
result->fetched++;
1662+
}
17191663

17201664
RETURN_TRUE;
17211665
}
@@ -1734,10 +1678,8 @@ PHP_FUNCTION(odbc_result)
17341678
RETCODE rc;
17351679
SQLLEN fieldsize;
17361680
zval *pv_res;
1737-
#ifdef HAVE_SQL_EXTENDED_FETCH
17381681
SQLULEN crow;
17391682
SQLUSMALLINT RowStatus[1];
1740-
#endif
17411683

17421684
ZEND_PARSE_PARAMETERS_START(2, 2)
17431685
Z_PARAM_OBJECT_OF_CLASS(pv_res, odbc_result_ce)
@@ -1788,20 +1730,14 @@ PHP_FUNCTION(odbc_result)
17881730

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

17981738
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
17991739
if (rc == SQL_ERROR) {
1800-
#ifdef HAVE_SQL_EXTENDED_FETCH
1801-
odbc_sql_error(result->conn_ptr, result->stmt, "SQLExtendedFetch");
1802-
#else
1803-
odbc_sql_error(result->conn_ptr, result->stmt, "SQLFetch");
1804-
#endif
1740+
odbc_sql_error(result->conn_ptr, result->stmt, "SQLExtendedFetch");
18051741
}
18061742
RETURN_FALSE;
18071743
}
@@ -1949,10 +1885,8 @@ PHP_FUNCTION(odbc_result_all)
19491885
char *pv_format = NULL;
19501886
size_t i, pv_format_len = 0;
19511887
SQLSMALLINT sql_c_type;
1952-
#ifdef HAVE_SQL_EXTENDED_FETCH
19531888
SQLULEN crow;
19541889
SQLUSMALLINT RowStatus[1];
1955-
#endif
19561890

19571891
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|s", &pv_res, odbc_result_ce, &pv_format, &pv_format_len) == FAILURE) {
19581892
RETURN_THROWS();
@@ -1965,11 +1899,9 @@ PHP_FUNCTION(odbc_result_all)
19651899
php_error_docref(NULL, E_WARNING, "No tuples available at this result index");
19661900
RETURN_FALSE;
19671901
}
1968-
#ifdef HAVE_SQL_EXTENDED_FETCH
19691902
if (result->fetch_abs)
19701903
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
19711904
else
1972-
#endif
19731905
rc = SQLFetch(result->stmt);
19741906

19751907
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
@@ -2067,11 +1999,9 @@ PHP_FUNCTION(odbc_result_all)
20671999
}
20682000
php_printf("</tr>\n");
20692001

2070-
#ifdef HAVE_SQL_EXTENDED_FETCH
20712002
if (result->fetch_abs)
20722003
rc = SQLExtendedFetch(result->stmt,SQL_FETCH_NEXT,1,&crow,RowStatus);
20732004
else
2074-
#endif
20752005
rc = SQLFetch(result->stmt);
20762006
}
20772007
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)