Skip to content

Commit

Permalink
Use a proper rcode for no more rows
Browse files Browse the repository at this point in the history
# Conflicts:
#	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_iodbc/rlm_sql_iodbc.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/sql.c
  • Loading branch information
arr2036 committed Jan 12, 2017
1 parent 11f26fe commit 16769e5
Show file tree
Hide file tree
Showing 14 changed files with 33 additions and 23 deletions.
Expand Up @@ -513,7 +513,7 @@ do {\
if (!conn->iterator) conn->iterator = cass_iterator_from_result(conn->result);
if (!conn->iterator) return RLM_SQL_OK; /* no result */

if (!cass_iterator_next(conn->iterator)) return RLM_SQL_OK; /* no more rows */
if (!cass_iterator_next(conn->iterator)) return RLM_SQL_NO_MORE_ROWS; /* no more rows */

cass_row = cass_iterator_get_row(conn->iterator); /* this shouldn't fail ? */
fields = sql_num_fields(handle, config); /* get the number of fields... */
Expand Down
2 changes: 1 addition & 1 deletion src/modules/rlm_sql/drivers/rlm_sql_db2/rlm_sql_db2.c
Expand Up @@ -207,7 +207,7 @@ static sql_rcode_t sql_fetch_row(rlm_sql_row_t *out, rlm_sql_handle_t *handle, r
c = sql_num_fields(handle, config);

/* advance cursor */
if (SQLFetch(conn->stmt) == SQL_NO_DATA_FOUND) return RLM_SQL_ERROR;
if (SQLFetch(conn->stmt) == SQL_NO_DATA_FOUND) return RLM_SQL_NO_MORE_ROWS;

MEM(row = (rlm_sql_row_t)talloc_zero_array(handle, char *, c + 1));
for (i = 0; i < c; i++) {
Expand Down
Expand Up @@ -211,7 +211,8 @@ static sql_rcode_t sql_fetch_row(rlm_sql_row_t *out, rlm_sql_handle_t *handle, U

if (conn->statement_type != isc_info_sql_stmt_exec_procedure) {
res = fb_fetch(conn);
if (res == 100) return RLM_SQL_OK;
if (res == 100) return RLM_SQL_NO_MORE_ROWS;

if (res) {
ERROR("Fetch problem: %s", conn->error);

Expand Down
Expand Up @@ -588,7 +588,7 @@ static sql_rcode_t sql_fetch_row(rlm_sql_row_t *out, rlm_sql_handle_t *handle, U
return RLM_SQL_RECONNECT;

case CS_END_DATA:
return RLM_SQL_OK;
return RLM_SQL_NO_MORE_ROWS;

case CS_SUCCEED:
*out = handle->row = conn->results;
Expand Down
4 changes: 3 additions & 1 deletion src/modules/rlm_sql/drivers/rlm_sql_iodbc/rlm_sql_iodbc.c
Expand Up @@ -240,7 +240,9 @@ static sql_rcode_t sql_fetch_row(rlm_sql_row_t *out, rlm_sql_handle_t *handle, U

*out = handle->row = NULL;

if ((rc = SQLFetch(conn->stmt)) == SQL_NO_DATA_FOUND) return 0;
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 */

*out = handle->row = conn->row;
Expand Down
3 changes: 3 additions & 0 deletions src/modules/rlm_sql/drivers/rlm_sql_mysql/rlm_sql_mysql.c
Expand Up @@ -485,7 +485,10 @@ static sql_rcode_t sql_fetch_row(rlm_sql_row_t *out, rlm_sql_handle_t *handle, r
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;
}
Expand Down
2 changes: 1 addition & 1 deletion src/modules/rlm_sql/drivers/rlm_sql_null/rlm_sql_null.c
Expand Up @@ -66,7 +66,7 @@ static sql_rcode_t sql_fetch_row(rlm_sql_row_t *out, UNUSED rlm_sql_handle_t *ha
{
*out = 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)
Expand Down
Expand Up @@ -452,7 +452,7 @@ static sql_rcode_t sql_fetch_row(rlm_sql_row_t *out, rlm_sql_handle_t *handle, r
if (status == OCI_NO_DATA) {
handle->row = 0;

return RLM_SQL_OK;
return RLM_SQL_NO_MORE_ROWS;
}

if (status == OCI_ERROR) {
Expand Down
Expand Up @@ -315,7 +315,7 @@ static sql_rcode_t sql_fetch_row(rlm_sql_row_t *out, rlm_sql_handle_t *handle, U
*out = NULL;
handle->row = NULL;

if (conn->cur_row >= PQntuples(conn->result)) return RLM_SQL_OK;
if (conn->cur_row >= PQntuples(conn->result)) return RLM_SQL_NO_MORE_ROWS;

free_result_row(conn);

Expand All @@ -331,9 +331,11 @@ static sql_rcode_t sql_fetch_row(rlm_sql_row_t *out, rlm_sql_handle_t *handle, U
}
conn->cur_row++;
*out = handle->row = conn->row;

return RLM_SQL_OK;
}

return RLM_SQL_OK;
return RLM_SQL_NO_MORE_ROWS;
}

static int sql_num_fields(rlm_sql_handle_t * handle, UNUSED rlm_sql_config_t *config)
Expand Down
6 changes: 3 additions & 3 deletions src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c
Expand Up @@ -541,9 +541,9 @@ static sql_rcode_t sql_fetch_row(rlm_sql_row_t *out, rlm_sql_handle_t *handle, r
if (sql_check_error(conn->db, status) != RLM_SQL_OK) return RLM_SQL_ERROR;

/*
* No more rows to process (were done)
* No more rows to process (we're done)
*/
if (status == SQLITE_DONE) return RLM_SQL_OK;
if (status == SQLITE_DONE) return RLM_SQL_NO_MORE_ROWS;

/*
* We only need to do this once per result set, because
Expand Down Expand Up @@ -622,7 +622,7 @@ static sql_rcode_t sql_free_result(rlm_sql_handle_t *handle, UNUSED rlm_sql_conf
* 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
Expand Down
Expand Up @@ -237,7 +237,7 @@ static sql_rcode_t sql_fetch_row(rlm_sql_row_t *out, rlm_sql_handle_t *handle, r
handle->row = NULL;

err_handle = SQLFetch(conn->stmt);
if (err_handle == SQL_NO_DATA_FOUND) return RLM_SQL_OK;
if (err_handle == SQL_NO_DATA_FOUND) return RLM_SQL_NO_MORE_ROWS;

if ((state = sql_check_error(err_handle, handle, config))) return state;

Expand Down
8 changes: 4 additions & 4 deletions src/modules/rlm_sql/rlm_sql.c
Expand Up @@ -198,7 +198,7 @@ static ssize_t sql_xlat(UNUSED TALLOC_CTX *ctx, char **out, UNUSED size_t outlen
if (rcode != RLM_SQL_OK) goto query_error;

rcode = rlm_sql_fetch_row(&row, inst, request, &handle);
if (rcode) {
if (rcode != RLM_SQL_OK) {
(inst->driver->sql_finish_select_query)(handle, inst->config);
goto query_error;
}
Expand Down Expand Up @@ -472,7 +472,7 @@ static int generate_sql_clients(rlm_sql_t *inst)

if (rlm_sql_select_query(inst, NULL, &handle, inst->config->client_query) != RLM_SQL_OK) return -1;

while ((rlm_sql_fetch_row(&row, inst, NULL, &handle) == 0) && (row = handle->row)) {
while ((rlm_sql_fetch_row(&row, inst, NULL, &handle) == RLM_SQL_OK) && (row = handle->row)) {
char *server = NULL;
i++;

Expand Down Expand Up @@ -745,7 +745,7 @@ static int sql_get_grouplist(rlm_sql_t const *inst, rlm_sql_handle_t **handle, R
talloc_free(expanded);
if (ret != RLM_SQL_OK) return -1;

while (rlm_sql_fetch_row(&row, inst, request, handle) == 0) {
while (rlm_sql_fetch_row(&row, inst, request, handle) == RLM_SQL_OK) {
row = (*handle)->row;
if (!row)
break;
Expand Down Expand Up @@ -1809,7 +1809,7 @@ static rlm_rcode_t mod_checksimul(void *instance, UNUSED void *thread, REQUEST *
call_num = vp->vp_strvalue;
}

while (rlm_sql_fetch_row(&row, inst, request, &handle) == 0) {
while (rlm_sql_fetch_row(&row, inst, request, &handle) == RLM_SQL_OK) {
row = handle->row;
if (!row) {
break;
Expand Down
11 changes: 6 additions & 5 deletions src/modules/rlm_sql/rlm_sql.h
Expand Up @@ -45,11 +45,12 @@ RCSIDH(rlm_sql_h, "$Id$")

/* 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 {
Expand Down
3 changes: 2 additions & 1 deletion src/modules/rlm_sql/sql.c
Expand Up @@ -49,6 +49,7 @@ const FR_NAME_NUMBER sql_rcode_table[] = {
{ "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 }
};

Expand Down Expand Up @@ -495,7 +496,7 @@ int sql_getvpdata(TALLOC_CTX *ctx, rlm_sql_t const *inst, REQUEST *request, rlm_
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(&row, inst, request, handle) == 0) {
while (rlm_sql_fetch_row(&row, inst, request, handle) == RLM_SQL_OK) {
if (!row) break;
if (sql_fr_pair_list_afrom_str(ctx, request, pair, row) != 0) {
REDEBUG("Error parsing user data from database result");
Expand Down

0 comments on commit 16769e5

Please sign in to comment.