diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c index 95c872c293f1..a43a1eefb1e4 100644 --- a/ext/odbc/php_odbc.c +++ b/ext/odbc/php_odbc.c @@ -635,9 +635,10 @@ void php_odbc_fetch_attribs(INTERNAL_FUNCTION_PARAMETERS, int mode) zval *pv_res; zend_long flag; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &pv_res, odbc_result_ce, &flag) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(2, 2) + Z_PARAM_OBJECT_OF_CLASS(pv_res, odbc_result_ce) + Z_PARAM_LONG(flag) + ZEND_PARSE_PARAMETERS_END(); result = Z_ODBC_RESULT_P(pv_res); CHECK_ODBC_RESULT(result); @@ -761,9 +762,9 @@ void odbc_transact(INTERNAL_FUNCTION_PARAMETERS, int type) RETCODE rc; zval *pv_conn; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &pv_conn, odbc_connection_ce) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + ZEND_PARSE_PARAMETERS_END(); odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); @@ -786,9 +787,10 @@ void odbc_column_lengths(INTERNAL_FUNCTION_PARAMETERS, int type) zval *pv_res; zend_long pv_num; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &pv_res, odbc_result_ce, &pv_num) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(2, 2) + Z_PARAM_OBJECT_OF_CLASS(pv_res, odbc_result_ce) + Z_PARAM_LONG(pv_num) + ZEND_PARSE_PARAMETERS_END(); result = Z_ODBC_RESULT_P(pv_res); CHECK_ODBC_RESULT(result); @@ -862,9 +864,10 @@ PHP_FUNCTION(odbc_prepare) int i; SQLUINTEGER scrollopts; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &pv_conn, odbc_connection_ce, &query, &query_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(2, 2) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + Z_PARAM_STRING(query, query_len) + ZEND_PARSE_PARAMETERS_END(); odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); @@ -975,9 +978,11 @@ PHP_FUNCTION(odbc_execute) int i; RETCODE rc; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|h", &pv_res, odbc_result_ce, &pv_param_ht) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 2) + Z_PARAM_OBJECT_OF_CLASS(pv_res, odbc_result_ce) + Z_PARAM_OPTIONAL + Z_PARAM_ARRAY_HT(pv_param_ht) + ZEND_PARSE_PARAMETERS_END(); result = Z_ODBC_RESULT_P(pv_res); CHECK_ODBC_RESULT(result); @@ -1128,9 +1133,9 @@ PHP_FUNCTION(odbc_cursor) odbc_result *result; RETCODE rc; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &pv_res, odbc_result_ce) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_OBJECT_OF_CLASS(pv_res, odbc_result_ce) + ZEND_PARSE_PARAMETERS_END(); result = Z_ODBC_RESULT_P(pv_res); CHECK_ODBC_RESULT(result); @@ -1183,9 +1188,10 @@ PHP_FUNCTION(odbc_data_source) UCHAR server_name[100], desc[200]; SQLSMALLINT len1=0, len2=0, fetch_type; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &zv_conn, odbc_connection_ce, &zv_fetch_type) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(2, 2) + Z_PARAM_OBJECT_OF_CLASS(zv_conn, odbc_connection_ce) + Z_PARAM_LONG(zv_fetch_type) + ZEND_PARSE_PARAMETERS_END(); fetch_type = (SQLSMALLINT) zv_fetch_type; @@ -1241,9 +1247,10 @@ PHP_FUNCTION(odbc_exec) RETCODE rc; SQLUINTEGER scrollopts; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &pv_conn, odbc_connection_ce, &query, &query_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(2, 2) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + Z_PARAM_STRING(query, query_len) + ZEND_PARSE_PARAMETERS_END(); odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); @@ -1730,9 +1737,11 @@ PHP_FUNCTION(odbc_result_all) size_t i, pv_format_len = 0; SQLSMALLINT sql_c_type; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|s", &pv_res, odbc_result_ce, &pv_format, &pv_format_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 2) + Z_PARAM_OBJECT_OF_CLASS(pv_res, odbc_result_ce) + Z_PARAM_OPTIONAL + Z_PARAM_STRING(pv_format, pv_format_len) + ZEND_PARSE_PARAMETERS_END(); result = Z_ODBC_RESULT_P(pv_res); CHECK_ODBC_RESULT(result); @@ -1858,9 +1867,9 @@ PHP_FUNCTION(odbc_free_result) zval *pv_res; odbc_result *result; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &pv_res, odbc_result_ce) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_OBJECT_OF_CLASS(pv_res, odbc_result_ce) + ZEND_PARSE_PARAMETERS_END(); result = Z_ODBC_RESULT_P(pv_res); CHECK_ODBC_RESULT(result); @@ -2177,9 +2186,9 @@ PHP_FUNCTION(odbc_close) zval *pv_conn; odbc_link *link; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &pv_conn, odbc_connection_ce) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + ZEND_PARSE_PARAMETERS_END(); link = Z_ODBC_LINK_P(pv_conn); odbc_connection *connection = Z_ODBC_CONNECTION_P(pv_conn); @@ -2200,9 +2209,9 @@ PHP_FUNCTION(odbc_num_rows) SQLLEN rows; zval *pv_res; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &pv_res, odbc_result_ce) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_OBJECT_OF_CLASS(pv_res, odbc_result_ce) + ZEND_PARSE_PARAMETERS_END(); result = Z_ODBC_RESULT_P(pv_res); CHECK_ODBC_RESULT(result); @@ -2219,9 +2228,9 @@ PHP_FUNCTION(odbc_next_result) zval *pv_res; int rc, i; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &pv_res, odbc_result_ce) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_OBJECT_OF_CLASS(pv_res, odbc_result_ce) + ZEND_PARSE_PARAMETERS_END(); result = Z_ODBC_RESULT_P(pv_res); CHECK_ODBC_RESULT(result); @@ -2265,9 +2274,9 @@ PHP_FUNCTION(odbc_num_fields) odbc_result *result; zval *pv_res; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &pv_res, odbc_result_ce) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_OBJECT_OF_CLASS(pv_res, odbc_result_ce) + ZEND_PARSE_PARAMETERS_END(); result = Z_ODBC_RESULT_P(pv_res); CHECK_ODBC_RESULT(result); @@ -2283,9 +2292,10 @@ PHP_FUNCTION(odbc_field_name) zval *pv_res; zend_long pv_num; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &pv_res, odbc_result_ce, &pv_num) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(2, 2) + Z_PARAM_OBJECT_OF_CLASS(pv_res, odbc_result_ce) + Z_PARAM_LONG(pv_num) + ZEND_PARSE_PARAMETERS_END(); result = Z_ODBC_RESULT_P(pv_res); CHECK_ODBC_RESULT(result); @@ -2318,9 +2328,10 @@ PHP_FUNCTION(odbc_field_type) zval *pv_res; zend_long pv_num; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &pv_res, odbc_result_ce, &pv_num) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(2, 2) + Z_PARAM_OBJECT_OF_CLASS(pv_res, odbc_result_ce) + Z_PARAM_LONG(pv_num) + ZEND_PARSE_PARAMETERS_END(); result = Z_ODBC_RESULT_P(pv_res); CHECK_ODBC_RESULT(result); @@ -2367,9 +2378,10 @@ PHP_FUNCTION(odbc_field_num) odbc_result *result; zval *pv_res; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os", &pv_res, odbc_result_ce, &fname, &fname_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(2, 2) + Z_PARAM_OBJECT_OF_CLASS(pv_res, odbc_result_ce) + Z_PARAM_STRING(fname, fname_len) + ZEND_PARSE_PARAMETERS_END(); result = Z_ODBC_RESULT_P(pv_res); CHECK_ODBC_RESULT(result); @@ -2402,9 +2414,11 @@ PHP_FUNCTION(odbc_autocommit) bool pv_onoff = false; bool pv_onoff_is_null = true; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|b!", &pv_conn, odbc_connection_ce, &pv_onoff, &pv_onoff_is_null) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 2) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + Z_PARAM_OPTIONAL + Z_PARAM_BOOL_OR_NULL(pv_onoff, pv_onoff_is_null) + ZEND_PARSE_PARAMETERS_END(); odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); @@ -2450,9 +2464,10 @@ static void php_odbc_lasterror(INTERNAL_FUNCTION_PARAMETERS, int mode) zval *pv_handle = NULL; char *ret; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "|O!", &pv_handle, odbc_connection_ce) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(0, 1) + Z_PARAM_OPTIONAL + Z_PARAM_OBJECT_OF_CLASS(pv_handle, odbc_connection_ce) + ZEND_PARSE_PARAMETERS_END(); if (pv_handle) { conn = Z_ODBC_CONNECTION_P(pv_handle); @@ -2504,9 +2519,12 @@ PHP_FUNCTION(odbc_setoption) zval *pv_handle; zend_long pv_which, pv_opt, pv_val; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "olll", &pv_handle, &pv_which, &pv_opt, &pv_val) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(4, 4) + Z_PARAM_OBJECT(pv_handle) + Z_PARAM_LONG(pv_which) + Z_PARAM_LONG(pv_opt) + Z_PARAM_LONG(pv_val) + ZEND_PARSE_PARAMETERS_END(); switch (pv_which) { case 1: /* SQLSetConnectOption */ @@ -2564,10 +2582,14 @@ PHP_FUNCTION(odbc_tables) size_t cat_len = 0, schema_len = 0, table_len = 0, type_len = 0; RETCODE rc; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|s!s!s!s!", &pv_conn, odbc_connection_ce, &cat, &cat_len, &schema, &schema_len, - &table, &table_len, &type, &type_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 5) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + Z_PARAM_OPTIONAL + Z_PARAM_STRING_OR_NULL(cat, cat_len) + Z_PARAM_STRING_OR_NULL(schema, schema_len) + Z_PARAM_STRING_OR_NULL(table, table_len) + Z_PARAM_STRING_OR_NULL(type, type_len) + ZEND_PARSE_PARAMETERS_END(); odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); @@ -2629,10 +2651,14 @@ PHP_FUNCTION(odbc_columns) size_t cat_len = 0, schema_len = 0, table_len = 0, column_len = 0; RETCODE rc; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|s!s!s!s!", &pv_conn, odbc_connection_ce, &cat, &cat_len, &schema, &schema_len, - &table, &table_len, &column, &column_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 5) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + Z_PARAM_OPTIONAL + Z_PARAM_STRING_OR_NULL(cat, cat_len) + Z_PARAM_STRING_OR_NULL(schema, schema_len) + Z_PARAM_STRING_OR_NULL(table, table_len) + Z_PARAM_STRING_OR_NULL(column, column_len) + ZEND_PARSE_PARAMETERS_END(); odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); @@ -2696,10 +2722,13 @@ PHP_FUNCTION(odbc_columnprivileges) size_t cat_len = 0, schema_len, table_len, column_len; RETCODE rc; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os!sss", &pv_conn, odbc_connection_ce, &cat, &cat_len, &schema, &schema_len, - &table, &table_len, &column, &column_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(5, 5) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + Z_PARAM_STRING_OR_NULL(cat, cat_len) + Z_PARAM_STRING(schema, schema_len) + Z_PARAM_STRING(table, table_len) + Z_PARAM_STRING(column, column_len) + ZEND_PARSE_PARAMETERS_END(); odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); @@ -2756,10 +2785,15 @@ PHP_FUNCTION(odbc_foreignkeys) size_t pcat_len = 0, pschema_len, ptable_len, fcat_len, fschema_len, ftable_len; RETCODE rc; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os!sssss", &pv_conn, odbc_connection_ce, &pcat, &pcat_len, &pschema, &pschema_len, - &ptable, &ptable_len, &fcat, &fcat_len, &fschema, &fschema_len, &ftable, &ftable_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(7, 7) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + Z_PARAM_STRING_OR_NULL(pcat, pcat_len) + Z_PARAM_STRING(pschema, pschema_len) + Z_PARAM_STRING(ptable, ptable_len) + Z_PARAM_STRING(fcat, fcat_len) + Z_PARAM_STRING(fschema, fschema_len) + Z_PARAM_STRING(ftable, ftable_len) + ZEND_PARSE_PARAMETERS_END(); #if defined(HAVE_IBMDB2) #define EMPTY_TO_NULL(xstr) \ @@ -2830,9 +2864,11 @@ PHP_FUNCTION(odbc_gettypeinfo) RETCODE rc; SQLSMALLINT data_type; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|l", &pv_conn, odbc_connection_ce, &pv_data_type) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 2) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + Z_PARAM_OPTIONAL + Z_PARAM_LONG(pv_data_type) + ZEND_PARSE_PARAMETERS_END(); data_type = (SQLSMALLINT) pv_data_type; @@ -2887,9 +2923,12 @@ PHP_FUNCTION(odbc_primarykeys) size_t cat_len = 0, schema_len, table_len; RETCODE rc; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os!ss", &pv_conn, odbc_connection_ce, &cat, &cat_len, &schema, &schema_len, &table, &table_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(4, 4) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + Z_PARAM_STRING_OR_NULL(cat, cat_len) + Z_PARAM_STRING(schema, schema_len) + Z_PARAM_STRING(table, table_len) + ZEND_PARSE_PARAMETERS_END(); odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); @@ -2945,10 +2984,13 @@ PHP_FUNCTION(odbc_procedurecolumns) size_t cat_len = 0, schema_len = 0, proc_len = 0, col_len = 0; RETCODE rc; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|s!s!s!s!", &pv_conn, odbc_connection_ce, &cat, &cat_len, &schema, &schema_len, - &proc, &proc_len, &col, &col_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 5) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + Z_PARAM_STRING_OR_NULL(cat, cat_len) + Z_PARAM_STRING_OR_NULL(schema, schema_len) + Z_PARAM_STRING_OR_NULL(proc, proc_len) + Z_PARAM_STRING_OR_NULL(col, col_len) + ZEND_PARSE_PARAMETERS_END(); odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); @@ -3005,9 +3047,12 @@ PHP_FUNCTION(odbc_procedures) size_t cat_len = 0, schema_len = 0, proc_len = 0; RETCODE rc; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "O|s!s!s!", &pv_conn, odbc_connection_ce, &cat, &cat_len, &schema, &schema_len, &proc, &proc_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(1, 4) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + Z_PARAM_STRING_OR_NULL(cat, cat_len) + Z_PARAM_STRING_OR_NULL(schema, schema_len) + Z_PARAM_STRING_OR_NULL(proc, proc_len) + ZEND_PARSE_PARAMETERS_END(); odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn); @@ -3065,10 +3110,15 @@ PHP_FUNCTION(odbc_specialcolumns) SQLUSMALLINT type, scope, nullable; RETCODE rc; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ols!ssll", &pv_conn, odbc_connection_ce, &vtype, &cat, &cat_len, &schema, &schema_len, - &name, &name_len, &vscope, &vnullable) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(7, 7) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + Z_PARAM_LONG(vtype) + Z_PARAM_STRING_OR_NULL(cat, cat_len) + Z_PARAM_STRING(schema, schema_len) + Z_PARAM_STRING(name, name_len) + Z_PARAM_LONG(vscope) + Z_PARAM_LONG(vnullable) + ZEND_PARSE_PARAMETERS_END(); type = (SQLUSMALLINT) vtype; scope = (SQLUSMALLINT) vscope; @@ -3132,10 +3182,14 @@ PHP_FUNCTION(odbc_statistics) SQLUSMALLINT unique, reserved; RETCODE rc; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os!ssll", &pv_conn, odbc_connection_ce, &cat, &cat_len, &schema, &schema_len, - &name, &name_len, &vunique, &vreserved) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(6, 6) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + Z_PARAM_STRING_OR_NULL(cat, cat_len) + Z_PARAM_STRING(schema, schema_len) + Z_PARAM_STRING(name, name_len) + Z_PARAM_LONG(vunique) + Z_PARAM_LONG(vreserved) /* XXX: Documented as 'accuracy' */ + ZEND_PARSE_PARAMETERS_END(); unique = (SQLUSMALLINT) vunique; reserved = (SQLUSMALLINT) vreserved; @@ -3196,9 +3250,12 @@ PHP_FUNCTION(odbc_tableprivileges) size_t cat_len = 0, schema_len, table_len; RETCODE rc; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os!ss", &pv_conn, odbc_connection_ce, &cat, &cat_len, &schema, &schema_len, &table, &table_len) == FAILURE) { - RETURN_THROWS(); - } + ZEND_PARSE_PARAMETERS_START(4, 4) + Z_PARAM_OBJECT_OF_CLASS(pv_conn, odbc_connection_ce) + Z_PARAM_STRING_OR_NULL(cat, cat_len) + Z_PARAM_STRING(schema, schema_len) + Z_PARAM_STRING(table, table_len) + ZEND_PARSE_PARAMETERS_END(); odbc_connection *conn = Z_ODBC_CONNECTION_P(pv_conn); CHECK_ODBC_CONNECTION(conn);