]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Pass fr_sql_query_t to sql_fields function
authorNick Porter <nick@portercomputing.co.uk>
Mon, 20 May 2024 18:38:30 +0000 (19:38 +0100)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 7 Jun 2024 02:26:58 +0000 (22:26 -0400)
And remove calls to sql_num_fields

src/modules/rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c
src/modules/rlm_sql/drivers/rlm_sql_db2/rlm_sql_db2.c
src/modules/rlm_sql/drivers/rlm_sql_firebird/rlm_sql_firebird.c
src/modules/rlm_sql/drivers/rlm_sql_freetds/rlm_sql_freetds.c
src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c
src/modules/rlm_sql/drivers/rlm_sql_oracle/rlm_sql_oracle.c
src/modules/rlm_sql/drivers/rlm_sql_postgresql/rlm_sql_postgresql.c
src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c
src/modules/rlm_sql/drivers/rlm_sql_unixodbc/rlm_sql_unixodbc.c
src/modules/rlm_sql/rlm_sql.c
src/modules/rlm_sql/rlm_sql.h

index 89b71c605eb754a47aef8507cc4437c70b848028..daa75f641d10069d5c6fd14442dd7611b3d32b50 100644 (file)
@@ -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)
index f026de9fec1d41f533270c66610f6737f358b9dd..b3bedf83d808b8df0bf3d7f1803888dc84b03f52 100644 (file)
@@ -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) {
index 6ca61b5c0c0d6367e802f0eab1216d828a7adead..698615f3de84ba897f0029dd17746c7b1d10832a 100644 (file)
@@ -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;
index db903fca88df3ecd981cddae5c091c77e918c33e..d8266bd7df5e91908de9d1464137e46938210b1a 100644 (file)
@@ -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;
index df15d0874cc20ab87e7cd5821825a9d2734ec4cc..da835ab6da044493e1cafc3db17dbda11f1a6aa4 100644 (file)
@@ -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;
index 2a8ca3b888875d213d15935a4473e2c96979209f..0a2c57e48d029dd28b322a3c4d9cd8f09b337b10 100644 (file)
@@ -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;
        }
index 88ef7bb3dc083390f289ff3601980123e1657d0f..b1c577895c2adca06b3802aa5722de7f3eed29b1 100644 (file)
@@ -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;
index 9769f2d47469e8eab2a7c16be500f82da67cf559..658470dc1cddc24166bf195f4eb0831eea3a48d7 100644 (file)
@@ -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;
index e4ade741de3a8e1d8b00f7dec9092b53ddf1e8e8..abae1800a7c68616febf6a29e227169c35e34ed0 100644 (file)
@@ -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;
index 2a009999b05e1ddf1a80545586d192b150f9e73a..26c59c0e1e2432bb7e77d33ee93038f6ffe91bee 100644 (file)
@@ -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, "<INVALID>"));
                goto error;
index cc3c7baaf471c4dcc9a74f0463cba1f451a7be9a..271b1f2ec341f07e692f977aca38ec0482086512 100644 (file)
@@ -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.