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;
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;
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 {\
}
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)
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;
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;
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;
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) {
/** 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;
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;
* 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;
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;
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);
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;
* 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;
/*
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;
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;
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;
* 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;
}
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;
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;
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;
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;
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;
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;
/*
* 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;
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.