memset(retval, 0, c*sizeof(char*)+1);
/* advance cursor */
- if(SQLFetch(conn->stmt) == SQL_NO_DATA_FOUND) {
+ if (SQLFetch(conn->stmt) == SQL_NO_DATA_FOUND) {
handle->row = NULL;
- goto error;
+ for (i = 0; i < c; i++) free(retval[i]);
+ free(retval);
+ return RLM_SQL_NO_MORE_ROWS;
}
- for(i = 0; i < c; i++) {
+ for (i = 0; i < c; i++) {
/* get column length */
SQLColAttribute(conn->stmt, i+1, SQL_DESC_DISPLAY_SIZE, NULL, 0, NULL, &len);
handle->row = retval;
return RLM_SQL_OK;
-
-error:
- for(i = 0; i < c; i++) {
- free(retval[i]);
- }
- free(retval);
-
- return RLM_SQL_ERROR;
}
static sql_rcode_t sql_free_result(rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t *config)
if (conn->statement_type != isc_info_sql_stmt_exec_procedure) {
res = fb_fetch(conn);
if (res == 100) {
- return 0;
+ return RLM_SQL_NO_MORE_ROWS;
}
if (res) {
return RLM_SQL_ERROR;
}
} else {
- conn->statement_type=0;
+ conn->statement_type = 0;
}
fb_store_row(conn);
return RLM_SQL_RECONNECT;
case CS_END_DATA:
- return RLM_SQL_OK;
+ return RLM_SQL_NO_MORE_ROWS;
case CS_SUCCEED:
handle->row = conn->results;
handle->row = NULL;
- if((rc = SQLFetch(conn->stmt)) == SQL_NO_DATA_FOUND) {
- return 0;
- }
+ rc = rc = SQLFetch(conn->stmt);
+ if (rc == SQL_NO_DATA_FOUND) return RLM_SQL_NO_MORE_ROWS;
+
/* XXX Check rc for database down, if so, return RLM_SQL_RECONNECT */
handle->row = conn->row;
goto retry_fetch_row;
}
} else if (ret > 0) return sql_check_error(NULL, ret);
+
+ /* If ret is 0 then there are no more rows */
#endif
+ return RLM_SQL_NO_MORE_ROWS;
}
return RLM_SQL_OK;
}
{
handle->row = NULL;
- return 0;
+ return RLM_SQL_NO_MORE_ROWS;
}
static sql_rcode_t sql_free_result(UNUSED rlm_sql_handle_t * handle, UNUSED rlm_sql_config_t *config)
if (status == OCI_NO_DATA) {
handle->row = 0;
- return RLM_SQL_OK;
+ return RLM_SQL_NO_MORE_ROWS;
}
if (status == OCI_ERROR) {
handle->row = NULL;
- if (conn->cur_row >= PQntuples(conn->result))
- return 0;
+ if (conn->cur_row >= PQntuples(conn->result)) return RLM_SQL_NO_MORE_ROWS;
free_result_row(conn);
}
conn->cur_row++;
handle->row = conn->row;
+ } else {
+ return RLM_SQL_NO_MORE_ROWS;
}
- return 0;
+ return RLM_SQL_OK;
}
static int sql_num_fields(rlm_sql_handle_t * handle, UNUSED rlm_sql_config_t *config)
/*
* No more rows to process (were done)
*/
- if (status == SQLITE_DONE) {
- return 1;
- }
+ if (status == SQLITE_DONE) return RLM_SQL_NO_MORE_ROWS;
/*
* We only need to do this once per result set, because
}
}
- return 0;
+ return RLM_SQL_OK;
}
static sql_rcode_t sql_free_result(rlm_sql_handle_t *handle, UNUSED rlm_sql_config_t *config)
* It's just the last error that occurred processing the
* statement.
*/
- return 0;
+ return RLM_SQL_OK;
}
/** Retrieves any errors associated with the connection handle
{
rlm_sql_sqlite_conn_t *conn = handle->conn;
- if (conn->db) {
- return sqlite3_changes(conn->db);
- }
+ if (conn->db) return sqlite3_changes(conn->db);
return -1;
}
handle->row = NULL;
err_handle = SQLFetch(conn->stmt);
- if(err_handle == SQL_NO_DATA_FOUND) {
- return 0;
- }
+ if (err_handle == SQL_NO_DATA_FOUND) return RLM_SQL_NO_MORE_ROWS;
if ((state = sql_check_error(err_handle, handle, config))) return state;
handle->row = conn->row;
- return 0;
+ return RLM_SQL_OK;
}
static sql_rcode_t sql_finish_select_query(rlm_sql_handle_t * handle, rlm_sql_config_t *config)
if (rcode != RLM_SQL_OK) goto query_error;
rcode = rlm_sql_fetch_row(inst, request, &handle);
- if (rcode) {
+ if (rcode != RLM_SQL_OK) {
(inst->module->sql_finish_select_query)(handle, inst->config);
goto query_error;
}
if (rlm_sql_select_query(inst, NULL, &handle, inst->config->client_query) != RLM_SQL_OK) return -1;
- while ((rlm_sql_fetch_row(inst, NULL, &handle) == 0) && (row = handle->row)) {
+ while ((rlm_sql_fetch_row(inst, NULL, &handle) == RLM_SQL_OK) && (row = handle->row)) {
int num_rows;
char *server = NULL;
talloc_free(expanded);
if (ret != RLM_SQL_OK) return -1;
- while (rlm_sql_fetch_row(inst, request, handle) == 0) {
+ while (rlm_sql_fetch_row(inst, request, handle) == RLM_SQL_OK) {
row = (*handle)->row;
if (!row)
break;
call_num = vp->vp_strvalue;
}
- while (rlm_sql_fetch_row(inst, request, &handle) == 0) {
+ while (rlm_sql_fetch_row(inst, request, &handle) == RLM_SQL_OK) {
int num_rows;
row = handle->row;
/* SQL Errors */
typedef enum {
- RLM_SQL_QUERY_INVALID = -3, //!< Query syntax error
- RLM_SQL_ERROR = -2, //!< General connection/server error
- RLM_SQL_OK = 0, //!< Success
- RLM_SQL_RECONNECT = 1, //!< Stale connection, should reconnect
- RLM_SQL_ALT_QUERY = 2 //!< Key constraint violation
+ RLM_SQL_QUERY_INVALID = -3, //!< Query syntax error.
+ RLM_SQL_ERROR = -2, //!< General connection/server error.
+ RLM_SQL_OK = 0, //!< Success.
+ RLM_SQL_RECONNECT = 1, //!< Stale connection, should reconnect.
+ RLM_SQL_ALT_QUERY, //!< Key constraint violation, use an alternative query.
+ RLM_SQL_NO_MORE_ROWS, //!< No more rows available
} sql_rcode_t;
typedef enum {
{ "server error", RLM_SQL_ERROR },
{ "query invalid", RLM_SQL_QUERY_INVALID },
{ "no connection", RLM_SQL_RECONNECT },
+ { "no more rows", RLM_SQL_NO_MORE_ROWS },
{ NULL, 0 }
};
rcode = rlm_sql_select_query(inst, request, handle, query);
if (rcode != RLM_SQL_OK) return -1; /* error handled by rlm_sql_select_query */
- while (rlm_sql_fetch_row(inst, request, handle) == 0) {
+ while (rlm_sql_fetch_row(inst, request, handle) == RLM_SQL_OK) {
row = (*handle)->row;
if (!row) break;
if (sql_fr_pair_list_afrom_str(ctx, request, pair, row) != 0) {