Navigation Menu

Skip to content

Commit

Permalink
Add sql_fields for Oracle. refs #993
Browse files Browse the repository at this point in the history
  • Loading branch information
jpereira committed May 5, 2015
1 parent 4c64674 commit a3dbe18
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions src/modules/rlm_sql/drivers/rlm_sql_oracle/rlm_sql_oracle.c
Expand Up @@ -215,6 +215,49 @@ static int sql_num_fields(rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t *con
return count;
}

static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, UNUSED 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 **)&param, i + 1);
if (status != OCI_SUCCESS) {
ERROR("rlm_sql_oracle: OCIParamGet(OCI_HTYPE_STMT) failed in sql_fields()");

goto 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;

error:
talloc_free(names);

return RLM_SQL_ERROR;
}

static sql_rcode_t sql_query(rlm_sql_handle_t *handle, rlm_sql_config_t *config, char const *query)
{
int status;
Expand Down Expand Up @@ -480,6 +523,7 @@ rlm_sql_module_t rlm_sql_oracle = {
.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,
Expand Down

0 comments on commit a3dbe18

Please sign in to comment.