Lots of code, and nothing ever used it.
return c;
}
-static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t *config)
-{
- rlm_sql_db2_conn_t *conn = handle->conn;
-
- SQLSMALLINT fields, len, i;
-
- char const **names;
- char field[128];
-
- SQLNumResultCols(conn->stmt, &fields);
- if (fields == 0) return RLM_SQL_ERROR;
-
- MEM(names = talloc_array(handle, char const *, fields));
-
- for (i = 0; i < fields; i++) {
- char *p;
-
- switch (SQLColAttribute(conn->stmt, i, SQL_DESC_BASE_COLUMN_NAME,
- field, sizeof(field), &len, NULL)) {
- case SQL_INVALID_HANDLE:
- case SQL_ERROR:
- ERROR("Failed retrieving field name at index %i", i);
- talloc_free(names);
- return RLM_SQL_ERROR;
-
- default:
- break;
- }
-
- MEM(p = talloc_array(names, char, (size_t)len + 1));
- strlcpy(p, field, (size_t)len + 1);
- names[i] = p;
- }
- *out = names;
-
- return RLM_SQL_OK;
-}
-
static sql_rcode_t sql_fetch_row(rlm_sql_handle_t *handle, rlm_sql_config_t *config)
{
int c, i;
.sql_select_query = sql_select_query,
.sql_num_fields = sql_num_fields,
.sql_affected_rows = sql_affected_rows,
- .sql_fields = sql_fields,
.sql_fetch_row = sql_fetch_row,
.sql_free_result = sql_free_result,
.sql_error = sql_error,
return sql_affected_rows(handle, config);
}
-/** Returns name of fields.
- *
- */
-static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t *config)
-{
- rlm_sql_firebird_conn_t *conn = handle->conn;
-
- int fields, i;
- char const **names;
-
- fields = conn->sqlda_out->sqld;
- if (fields <= 0) return RLM_SQL_ERROR;
-
- MEM(names = talloc_array(handle, char const *, fields));
-
- for (i = 0; i < fields; i++) names[i] = conn->sqlda_out->sqlvar[i].sqlname;
- *out = names;
-
- return RLM_SQL_OK;
-}
-
/** Returns an individual row.
*
*/
.sql_num_rows = sql_num_rows,
.sql_affected_rows = sql_affected_rows,
.sql_fetch_row = sql_fetch_row,
- .sql_fields = sql_fields,
.sql_free_result = sql_free_result,
.sql_error = sql_error,
.sql_finish_query = sql_finish_query,
return num;
}
-/*************************************************************************
- *
- * Function: sql_fields
- *
- * 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 *config)
-{
- rlm_sql_freetds_conn_t *conn = handle->conn;
- CS_DATAFMT datafmt;
- int fields, i;
- char const **names;
-
- /* Get number of elements in row result */
- if (ct_res_info(conn->command, CS_NUMDATA, (CS_INT *)&fields, CS_UNUSED, NULL) != CS_SUCCEED) {
- ERROR("rlm_sql_freetds: sql_fields() Error retrieving column count");
-
- return RLM_SQL_ERROR;
- }
-
- if (fields <= 0) return RLM_SQL_ERROR;
-
- MEM(names = talloc_array(handle, char const *, fields));
-
- for (i = 0; i < fields; i++) {
- int col = i + 1;
- char *p;
-
- /*
- ** Get the column description. ct_describe() fills the
- ** datafmt parameter with a description of the column.
- */
- if (ct_describe(conn->command, col, &datafmt) != CS_SUCCEED) {
- ERROR("rlm_sql_freetds: sql_fields() Problems with ct_describe(), column %d", col);
- talloc_free(names);
- return RLM_SQL_ERROR;
- }
-
- if (datafmt.namelen > 0) {
- MEM(p = talloc_array(names, char, (size_t)datafmt.namelen + 1));
- strlcpy(p, datafmt.name, (size_t)datafmt.namelen + 1);
- names[i] = p;
- }
- }
-
- *out = names;
-
- return RLM_SQL_OK;
-}
-
/** Retrieves any errors associated with the connection handle
*
* @note Caller will free any memory allocated in ctx.
.sql_select_query = sql_select_query,
.sql_num_fields = sql_num_fields,
.sql_num_rows = sql_num_rows,
- .sql_fields = sql_fields,
.sql_affected_rows = sql_affected_rows,
.sql_fetch_row = sql_fetch_row,
.sql_free_result = sql_free_result,
return (int)count;
}
-static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t *config)
-{
- rlm_sql_iodbc_conn_t *conn = handle->conn;
-
- SQLSMALLINT fields, len, i;
-
- char const **names;
- char field[128];
-
- SQLNumResultCols(conn->stmt, &fields);
- if (fields == 0) return RLM_SQL_ERROR;
-
- MEM(names = talloc_array(handle, char const *, fields));
-
- for (i = 0; i < fields; i++) {
- char *p;
-
- switch (SQLColAttribute(conn->stmt, i, SQL_DESC_BASE_COLUMN_NAME,
- field, sizeof(field), &len, NULL)) {
- case SQL_INVALID_HANDLE:
- case SQL_ERROR:
- ERROR("Failed retrieving field name at index %i", i);
- talloc_free(names);
- return RLM_SQL_ERROR;
-
- default:
- break;
- }
-
- MEM(p = talloc_array(names, char, (size_t)len + 1));
- strlcpy(p, field, (size_t)len + 1);
- names[i] = p;
- }
- *out = names;
-
- return RLM_SQL_OK;
-}
-
static sql_rcode_t sql_fetch_row(rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t *config)
{
SQLRETURN rc;
.sql_select_query = sql_select_query,
.sql_num_fields = sql_num_fields,
.sql_affected_rows = sql_affected_rows,
- .sql_fields = sql_fields,
.sql_fetch_row = sql_fetch_row,
.sql_free_result = sql_free_result,
.sql_error = sql_error,
return 0;
}
-static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t *config)
-{
- rlm_sql_mysql_conn_t *conn = handle->conn;
-
- unsigned int fields, i;
- MYSQL_FIELD *field_info;
- char const **names;
-
- fields = mysql_num_fields(conn->result);
- if (fields == 0) return RLM_SQL_ERROR;
-
- /*
- * https://bugs.mysql.com/bug.php?id=32318
- * Hints that we don't have to free field_info.
- */
- field_info = mysql_fetch_fields(conn->result);
- if (!field_info) return RLM_SQL_ERROR;
-
- MEM(names = talloc_zero_array(handle, char const *, fields + 1));
-
- for (i = 0; i < fields; i++) names[i] = field_info[i].name;
- *out = names;
-
- return RLM_SQL_OK;
-}
-
static sql_rcode_t sql_fetch_row(rlm_sql_handle_t *handle, rlm_sql_config_t *config)
{
rlm_sql_mysql_conn_t *conn = handle->conn;
.sql_num_fields = sql_num_fields,
.sql_num_rows = sql_num_rows,
.sql_affected_rows = sql_affected_rows,
- .sql_fields = sql_fields,
.sql_fetch_row = sql_fetch_row,
.sql_free_result = sql_free_result,
.sql_error = sql_error,
return count;
}
-static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, rlm_sql_config_t *config)
-{
- rlm_sql_oracle_conn_t *conn = handle->conn;
- int fields, i, status;
- char const **names;
- OCIParam *param;
-
- fields = sql_num_fields(handle, config);
- if (fields <= 0) return RLM_SQL_ERROR;
-
- MEM(names = talloc_array(handle, char const *, fields));
-
- for (i = 0; i < fields; i++) {
- OraText *pcol_name = NULL;
- ub4 pcol_size = 0;
-
- status = OCIParamGet(conn->query, OCI_HTYPE_STMT, conn->error, (dvoid **)¶m, i + 1);
- if (status != OCI_SUCCESS) {
- ERROR("rlm_sql_oracle: OCIParamGet(OCI_HTYPE_STMT) failed in sql_fields()");
- error:
- talloc_free(names);
-
- return RLM_SQL_ERROR;
- }
-
- status = OCIAttrGet((dvoid **)param, OCI_DTYPE_PARAM, &pcol_name, &pcol_size,
- OCI_ATTR_NAME, conn->error);
- if (status != OCI_SUCCESS) {
- ERROR("rlm_sql_oracle: OCIParamGet(OCI_ATTR_NAME) failed in sql_fields()");
-
- goto error;
- }
-
- names[i] = (char const *)pcol_name;
- }
-
- *out = names;
-
- return RLM_SQL_OK;
-}
-
static sql_rcode_t sql_query(rlm_sql_handle_t *handle, rlm_sql_config_t *config, char const *query)
{
int status;
.sql_num_rows = sql_num_rows,
.sql_affected_rows = sql_affected_rows,
.sql_fetch_row = sql_fetch_row,
- .sql_fields = sql_fields,
.sql_free_result = sql_free_result,
.sql_error = sql_error,
.sql_finish_query = sql_finish_query,
return sql_query(handle, config, query);
}
-static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t *config)
-{
- rlm_sql_postgres_conn_t *conn = handle->conn;
-
- int fields, i;
- char const **names;
-
- fields = PQnfields(conn->result);
- if (fields <= 0) return RLM_SQL_ERROR;
-
- MEM(names = talloc_zero_array(handle, char const *, fields + 1));
-
- for (i = 0; i < fields; i++) names[i] = PQfname(conn->result, i);
- *out = names;
-
- return RLM_SQL_OK;
-}
-
static sql_rcode_t sql_fetch_row(rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t *config)
{
.sql_query = sql_query,
.sql_select_query = sql_select_query,
.sql_num_fields = sql_num_fields,
- .sql_fields = sql_fields,
.sql_fetch_row = sql_fetch_row,
.sql_error = sql_error,
.sql_finish_query = sql_free_result,
return 0;
}
-static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t *config)
-{
- rlm_sql_sqlite_conn_t *conn = handle->conn;
-
- int fields, i;
- char const **names;
-
- fields = sqlite3_column_count(conn->statement);
- if (fields <= 0) return RLM_SQL_ERROR;
-
- MEM(names = talloc_zero_array(handle, char const *, fields + 1));
-
- for (i = 0; i < fields; i++) names[i] = sqlite3_column_name(conn->statement, i);
- *out = names;
-
- return RLM_SQL_OK;
-}
-
static sql_rcode_t sql_fetch_row(rlm_sql_handle_t *handle, rlm_sql_config_t *config)
{
int status;
.sql_num_rows = sql_num_rows,
.sql_affected_rows = sql_affected_rows,
.sql_fetch_row = sql_fetch_row,
- .sql_fields = sql_fields,
.sql_free_result = sql_free_result,
.sql_error = sql_error,
.sql_finish_query = sql_finish_query,
return num_fields;
}
-static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t *config)
-{
- rlm_sql_unixodbc_conn_t *conn = handle->conn;
-
- SQLSMALLINT fields, len, i;
-
- char const **names;
- char field[128];
-
- SQLNumResultCols(conn->stmt, &fields);
- if (fields == 0) return RLM_SQL_ERROR;
-
- MEM(names = talloc_array(handle, char const *, fields));
-
- for (i = 0; i < fields; i++) {
- char *p;
-
- switch (SQLColAttribute(conn->stmt, i, SQL_DESC_BASE_COLUMN_NAME,
- field, sizeof(field), &len, NULL)) {
- case SQL_INVALID_HANDLE:
- case SQL_ERROR:
- ERROR("Failed retrieving field name at index %i", i);
- talloc_free(names);
- return RLM_SQL_ERROR;
-
- default:
- break;
- }
-
- MEM(p = talloc_array(names, char, (size_t)len + 1));
- strlcpy(p, field, (size_t)len + 1);
- names[i] = p;
- }
- *out = names;
-
- return RLM_SQL_OK;
-}
-
static sql_rcode_t sql_fetch_row(rlm_sql_handle_t *handle, rlm_sql_config_t *config)
{
rlm_sql_unixodbc_conn_t *conn = handle->conn;
.sql_select_query = sql_select_query,
.sql_num_fields = sql_num_fields,
.sql_affected_rows = sql_affected_rows,
- .sql_fields = sql_fields,
.sql_fetch_row = sql_fetch_row,
.sql_free_result = sql_free_result,
.sql_error = sql_error,
/*
* Load the appropriate driver for our database.
- *
- * We need this to check if the sql_fields callback is provided.
*/
inst->handle = fr_dlopenext(inst->config->sql_driver_name);
if (!inst->handle) {
int (*sql_affected_rows)(rlm_sql_handle_t *handle, rlm_sql_config_t *config);
sql_rcode_t (*sql_fetch_row)(rlm_sql_handle_t *handle, rlm_sql_config_t *config);
- sql_rcode_t (*sql_fields)(char const **out[], rlm_sql_handle_t *handle, rlm_sql_config_t *config);
sql_rcode_t (*sql_free_result)(rlm_sql_handle_t *handle, rlm_sql_config_t *config);
sql_error_t sql_error; //!< Get any errors from the previous query.