From: Nick Porter Date: Mon, 20 May 2024 18:38:30 +0000 (+0100) Subject: Pass fr_sql_query_t to sql_fields function X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=96ac8ca819cfc58cc514aca8a616fab94cf1abc4;p=thirdparty%2Ffreeradius-server.git Pass fr_sql_query_t to sql_fields function And remove calls to sql_num_fields --- diff --git a/src/modules/rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c b/src/modules/rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c index 89b71c605eb..daa75f641d1 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c @@ -476,13 +476,6 @@ static unlang_action_t sql_query(rlm_rcode_t *p_result, UNUSED int *priority, UN RETURN_MODULE_OK; } -static int sql_num_fields(rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t const *config) -{ - rlm_sql_cassandra_conn_t *conn = handle->conn; - - return conn->result ? cass_result_column_count(conn->result) : 0; -} - static int sql_num_rows(fr_sql_query_t *query_ctx, UNUSED rlm_sql_config_t const *config) { rlm_sql_cassandra_conn_t *conn = query_ctx->handle->conn; @@ -490,17 +483,17 @@ static int sql_num_rows(fr_sql_query_t *query_ctx, UNUSED rlm_sql_config_t const return conn->result ? cass_result_row_count(conn->result) : 0; } -static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, rlm_sql_config_t const *config) +static sql_rcode_t sql_fields(char const **out[], fr_sql_query_t *query_ctx, UNUSED rlm_sql_config_t const *config) { - rlm_sql_cassandra_conn_t *conn = handle->conn; + rlm_sql_cassandra_conn_t *conn = query_ctx->handle->conn; unsigned int fields, i; char const **names; - fields = sql_num_fields(handle, config); + fields = conn->result ? cass_result_column_count(conn->result) : 0; if (fields == 0) return RLM_SQL_ERROR; - MEM(names = talloc_array(handle, char const *, fields)); + MEM(names = talloc_array(query_ctx, char const *, fields)); for (i = 0; i < fields; i++) { const char *col_name; @@ -525,7 +518,6 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority CassRow const *cass_row; int fields, i; char **row; - rlm_sql_handle_t *handle = query_ctx->handle; #define RLM_CASS_ERR_DATA_RETRIVE(_t) \ do {\ @@ -557,7 +549,7 @@ do {\ } cass_row = cass_iterator_get_row(conn->iterator); /* this shouldn't fail ? */ - fields = sql_num_fields(handle, &query_ctx->inst->config); /* get the number of fields... */ + fields = cass_result_column_count(conn->result); /* get the number of fields... */ /* * Free the previous result (also gets called on finish_query) diff --git a/src/modules/rlm_sql/drivers/rlm_sql_db2/rlm_sql_db2.c b/src/modules/rlm_sql/drivers/rlm_sql_db2/rlm_sql_db2.c index f026de9fec1..b3bedf83d80 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_db2/rlm_sql_db2.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_db2/rlm_sql_db2.c @@ -135,19 +135,9 @@ static unlang_action_t sql_query(rlm_rcode_t *p_result, UNUSED int *priority, re RETURN_MODULE_OK; } -static int sql_num_fields(rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t const *config) +static sql_rcode_t sql_fields(char const **out[], fr_sql_query_t *query_ctx, UNUSED rlm_sql_config_t const *config) { - SQLSMALLINT c; - rlm_sql_db2_conn_t *conn; - - conn = handle->conn; - SQLNumResultCols(conn->stmt, &c); - return c; -} - -static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t const *config) -{ - rlm_sql_db2_conn_t *conn = handle->conn; + rlm_sql_db2_conn_t *conn = query_ctx->handle->conn; SQLSMALLINT fields, len, i; @@ -157,7 +147,7 @@ static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUS SQLNumResultCols(conn->stmt, &fields); if (fields == 0) return RLM_SQL_ERROR; - MEM(names = talloc_array(handle, char const *, fields)); + MEM(names = talloc_array(query_ctx, char const *, fields)); for (i = 0; i < fields; i++) { char *p; @@ -186,8 +176,9 @@ static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUS static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority, UNUSED request_t *request, void *uctx) { fr_sql_query_t *query_ctx = talloc_get_type_abort(uctx, fr_sql_query_t); - int c, i; + int i; SQLINTEGER len, slen; + SQLSMALLINT c; rlm_sql_row_t row; rlm_sql_db2_conn_t *conn; rlm_sql_handle_t *handle = query_ctx->handle; @@ -195,7 +186,7 @@ static unlang_action_t sql_fetch_row(rlm_rcode_t *p_result, UNUSED int *priority TALLOC_FREE(query_ctx->row); conn = handle->conn; - c = sql_num_fields(handle, config); + SQLNumResultCols(conn->stmt, &c); /* advance cursor */ if (SQLFetch(conn->stmt) == SQL_NO_DATA_FOUND) { diff --git a/src/modules/rlm_sql/drivers/rlm_sql_firebird/rlm_sql_firebird.c b/src/modules/rlm_sql/drivers/rlm_sql_firebird/rlm_sql_firebird.c index 6ca61b5c0c0..698615f3de8 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_firebird/rlm_sql_firebird.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_firebird/rlm_sql_firebird.c @@ -154,9 +154,9 @@ static unlang_action_t sql_query(rlm_rcode_t *p_result, UNUSED int *priority, UN /** Returns name of fields. * */ -static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t const *config) +static sql_rcode_t sql_fields(char const **out[], fr_sql_query_t *query_ctx, UNUSED rlm_sql_config_t const *config) { - rlm_sql_firebird_conn_t *conn = handle->conn; + rlm_sql_firebird_conn_t *conn = query_ctx->handle->conn; int fields, i; char const **names; @@ -164,7 +164,7 @@ static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUS fields = conn->sqlda_out->sqld; if (fields <= 0) return RLM_SQL_ERROR; - MEM(names = talloc_array(handle, char const *, fields)); + MEM(names = talloc_array(query_ctx, char const *, fields)); for (i = 0; i < fields; i++) names[i] = conn->sqlda_out->sqlvar[i].sqlname; *out = names; diff --git a/src/modules/rlm_sql/drivers/rlm_sql_freetds/rlm_sql_freetds.c b/src/modules/rlm_sql/drivers/rlm_sql_freetds/rlm_sql_freetds.c index db903fca88d..d8266bd7df5 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_freetds/rlm_sql_freetds.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_freetds/rlm_sql_freetds.c @@ -356,9 +356,9 @@ static int sql_num_fields(rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t cons * Purpose: Return name of regular result columns. * *************************************************************************/ -static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t const *config) +static sql_rcode_t sql_fields(char const **out[], fr_sql_query_t *query_ctx, UNUSED rlm_sql_config_t const *config) { - rlm_sql_freetds_conn_t *conn = handle->conn; + rlm_sql_freetds_conn_t *conn = query_ctx->handle->conn; CS_DATAFMT datafmt; int fields, i; char const **names; @@ -372,7 +372,7 @@ static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUS if (fields <= 0) return RLM_SQL_ERROR; - MEM(names = talloc_array(handle, char const *, fields)); + MEM(names = talloc_array(query_ctx, char const *, fields)); for (i = 0; i < fields; i++) { int col = i + 1; diff --git a/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c b/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c index df15d0874cc..da835ab6da0 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c @@ -425,16 +425,6 @@ retry_store_result: return RLM_SQL_OK; } -static int sql_num_fields(rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t const *config) -{ - rlm_sql_mysql_conn_t *conn = talloc_get_type_abort(handle->conn, rlm_sql_mysql_conn_t); - - /* - * Count takes a connection handle - */ - return mysql_field_count(conn->sock); -} - static unlang_action_t sql_select_query(rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx) { fr_sql_query_t *query_ctx = talloc_get_type_abort(uctx, fr_sql_query_t); @@ -456,9 +446,9 @@ static int sql_num_rows(fr_sql_query_t *query_ctx, UNUSED rlm_sql_config_t const return 0; } -static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, rlm_sql_config_t const *config) +static sql_rcode_t sql_fields(char const **out[], fr_sql_query_t *query_ctx, UNUSED rlm_sql_config_t const *config) { - rlm_sql_mysql_conn_t *conn = talloc_get_type_abort(handle->conn, rlm_sql_mysql_conn_t); + rlm_sql_mysql_conn_t *conn = talloc_get_type_abort(query_ctx->handle->conn, rlm_sql_mysql_conn_t); unsigned int fields, i; MYSQL_FIELD *field_info; @@ -469,7 +459,7 @@ static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, rlm_ * Different versions of SQL use different functions, * and some don't like NULL pointers. */ - fields = sql_num_fields(handle, config); + fields = mysql_field_count(conn->sock); if (fields == 0) return RLM_SQL_ERROR; /* @@ -479,7 +469,7 @@ static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, rlm_ field_info = mysql_fetch_fields(conn->result); if (!field_info) return RLM_SQL_ERROR; - MEM(names = talloc_array(handle, char const *, fields)); + MEM(names = talloc_array(query_ctx, char const *, fields)); for (i = 0; i < fields; i++) names[i] = field_info[i].name; *out = names; @@ -532,7 +522,7 @@ retry_fetch_row: RETURN_MODULE_OK; } - num_fields = mysql_num_fields(conn->result); + num_fields = mysql_field_count(conn->sock); if (!num_fields) { query_ctx->rcode = RLM_SQL_NO_MORE_ROWS; RETURN_MODULE_OK; diff --git a/src/modules/rlm_sql/drivers/rlm_sql_oracle/rlm_sql_oracle.c b/src/modules/rlm_sql/drivers/rlm_sql_oracle/rlm_sql_oracle.c index 2a8ca3b8888..0a2c57e48d0 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_oracle/rlm_sql_oracle.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_oracle/rlm_sql_oracle.c @@ -308,29 +308,18 @@ static sql_rcode_t sql_socket_init(rlm_sql_handle_t *handle, rlm_sql_config_t co return RLM_SQL_OK; } -static int sql_num_fields(rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t const *config) +static sql_rcode_t sql_fields(char const **out[], fr_sql_query_t *query_ctx, UNUSED rlm_sql_config_t const *config) { - int count; - rlm_sql_oracle_conn_t *conn = handle->conn; - - /* get the number of columns in the select list */ - if (OCIAttrGet((dvoid *)conn->query, OCI_HTYPE_STMT, (dvoid *)&count, NULL, OCI_ATTR_PARAM_COUNT, - conn->error)) return -1; - - return count; -} - -static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, rlm_sql_config_t const *config) -{ - rlm_sql_oracle_conn_t *conn = handle->conn; + rlm_sql_oracle_conn_t *conn = query_ctx->handle->conn; int fields, i, status; char const **names; OCIParam *param; - fields = sql_num_fields(handle, config); - if (fields <= 0) return RLM_SQL_ERROR; + if (OCIAttrGet((dvoid *)conn->query, OCI_HTYPE_STMT, (dvoid *)&fields, NULL, OCI_ATTR_PARAM_COUNT, + conn->error)) return RLM_SQL_ERROR; + if (fields == 0) return RLM_SQL_ERROR; - MEM(names = talloc_array(handle, char const *, fields)); + MEM(names = talloc_array(query_ctx, char const *, fields)); for (i = 0; i < fields; i++) { OraText *pcol_name = NULL; @@ -440,7 +429,8 @@ static unlang_action_t sql_select_query(rlm_rcode_t *p_result, UNUSED int *prior * the number of columns won't change. */ if (conn->col_count == 0) { - conn->col_count = sql_num_fields(query_ctx->handle, &query_ctx->inst->config); + if (OCIAttrGet((dvoid *)conn->query, OCI_HTYPE_STMT, (dvoid *)&conn->col_count, NULL, + OCI_ATTR_PARAM_COUNT, conn->error)) goto error; if (conn->col_count == 0) goto error; } diff --git a/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c b/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c index 88ef7bb3dc0..b1c577895c2 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c @@ -404,9 +404,9 @@ static unlang_action_t sql_query(rlm_rcode_t *p_result, UNUSED int *priority, UN RETURN_MODULE_OK; } -static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t const *config) +static sql_rcode_t sql_fields(char const **out[], fr_sql_query_t *query_ctx, UNUSED rlm_sql_config_t const *config) { - rlm_sql_postgres_conn_t *conn = handle->conn; + rlm_sql_postgres_conn_t *conn = query_ctx->handle->conn; int fields, i; char const **names; @@ -414,7 +414,7 @@ static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUS fields = PQnfields(conn->result); if (fields <= 0) return RLM_SQL_ERROR; - MEM(names = talloc_array(handle, char const *, fields)); + MEM(names = talloc_array(query_ctx, char const *, fields)); for (i = 0; i < fields; i++) names[i] = PQfname(conn->result, i); *out = names; diff --git a/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c b/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c index 9769f2d4746..658470dc1cd 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c @@ -503,9 +503,9 @@ static int sql_num_fields(rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t cons return 0; } -static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t const *config) +static sql_rcode_t sql_fields(char const **out[], fr_sql_query_t *query_ctx, UNUSED rlm_sql_config_t const *config) { - rlm_sql_sqlite_conn_t *conn = handle->conn; + rlm_sql_sqlite_conn_t *conn = query_ctx->handle->conn; int fields, i; char const **names; @@ -513,7 +513,7 @@ static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUS fields = sqlite3_column_count(conn->statement); if (fields <= 0) return RLM_SQL_ERROR; - MEM(names = talloc_array(handle, char const *, fields)); + MEM(names = talloc_array(query_ctx, char const *, fields)); for (i = 0; i < fields; i++) names[i] = sqlite3_column_name(conn->statement, i); *out = names; diff --git a/src/modules/rlm_sql/drivers/rlm_sql_unixodbc/rlm_sql_unixodbc.c b/src/modules/rlm_sql/drivers/rlm_sql_unixodbc/rlm_sql_unixodbc.c index e4ade741de3..abae1800a7c 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_unixodbc/rlm_sql_unixodbc.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_unixodbc/rlm_sql_unixodbc.c @@ -176,9 +176,9 @@ static int sql_num_fields(rlm_sql_handle_t *handle, rlm_sql_config_t const *conf return num_fields; } -static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t const *config) +static sql_rcode_t sql_fields(char const **out[], fr_sql_query_t *query_ctx, UNUSED rlm_sql_config_t const *config) { - rlm_sql_unixodbc_conn_t *conn = handle->conn; + rlm_sql_unixodbc_conn_t *conn = query_ctx->handle->conn; SQLSMALLINT fields, len, i; @@ -188,7 +188,7 @@ static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUS SQLNumResultCols(conn->stmt, &fields); if (fields == 0) return RLM_SQL_ERROR; - MEM(names = talloc_array(handle, char const *, fields)); + MEM(names = talloc_array(query_ctx, char const *, fields)); for (i = 0; i < fields; i++) { char *p; diff --git a/src/modules/rlm_sql/rlm_sql.c b/src/modules/rlm_sql/rlm_sql.c index 2a009999b05..26c59c0e1e2 100644 --- a/src/modules/rlm_sql/rlm_sql.c +++ b/src/modules/rlm_sql/rlm_sql.c @@ -712,7 +712,7 @@ static unlang_action_t mod_map_proc(rlm_rcode_t *p_result, void const *mod_inst, /* * Map proc only registered if driver provides an sql_fields function */ - ret = (inst->driver->sql_fields)(&fields, handle, &inst->config); + ret = (inst->driver->sql_fields)(&fields, query_ctx, &inst->config); if (ret != RLM_SQL_OK) { RERROR("Failed retrieving field names: %s", fr_table_str_by_value(sql_rcode_description_table, ret, "")); goto error; diff --git a/src/modules/rlm_sql/rlm_sql.h b/src/modules/rlm_sql/rlm_sql.h index cc3c7baaf47..271b1f2ec34 100644 --- a/src/modules/rlm_sql/rlm_sql.h +++ b/src/modules/rlm_sql/rlm_sql.h @@ -211,7 +211,7 @@ typedef struct { int (*sql_affected_rows)(fr_sql_query_t *query_ctx, rlm_sql_config_t const *config); unlang_function_t sql_fetch_row; - sql_rcode_t (*sql_fields)(char const **out[], rlm_sql_handle_t *handle, rlm_sql_config_t const *config); + sql_rcode_t (*sql_fields)(char const **out[], fr_sql_query_t *query_ctx, rlm_sql_config_t const *config); sql_rcode_t (*sql_free_result)(fr_sql_query_t *query_ctx, rlm_sql_config_t const *config); sql_error_t sql_error; //!< Get any errors from the previous query.