#include <stdio.h>
#include <stdlib.h>
#include "examples.h"
enum {
MAX_NAME_LEN = 64,
MAX_ARRAY_SIZE = 4
};
typedef struct _result_t {
char name[MAX_NAME_LEN+1];
double salary;
short name_ind;
short sal_ind;
unsigned short name_rlen;
unsigned short name_rcode;
} result_t;
void print_record __P((result_t * r));
int do_array_select(sqlo_db_handle_t dbh, double min_salary)
{
sqlo_stmt_handle_t sth;
int i;
int status;
result_t result[MAX_ARRAY_SIZE];
int rows_fetched;
int rows_fetched_total = 0;
int done_fetching = 0;
double salary = min_salary;
int skip_size = sizeof(result[0]);
sth = prepare_cursor(dbh, &salary);
if (SQLO_SUCCESS !=
(sqlo_define_by_pos2(sth, 1, SQLOT_STR, result[0].name, sizeof(result[0].name),
&result[0].name_ind, &result[0].name_rlen,
&result[0].name_rcode, skip_size)) ||
(sqlo_define_by_pos2(sth, 2, SQLOT_FLT, &result[0].salary, sizeof(result[0].salary),
&result[0].sal_ind, 0, 0, skip_size))) {
error_exit(dbh, "sqlo_define_by_pos");
}
status = sqlo_execute(sth, 0);
while (!done_fetching) {
rows_fetched = MAX_ARRAY_SIZE;
status = sqlo_fetch(sth, MAX_ARRAY_SIZE);
if (0 > status)
error_exit(dbh, "sqlo_execute(NEXT)");
else if (SQLO_NO_DATA == status) {
rows_fetched = sqlo_prows(sth);
rows_fetched = rows_fetched - rows_fetched_total;
done_fetching = 1;
}
for (i = 0; i < rows_fetched; ++i)
print_record(&result[i]);
rows_fetched_total += rows_fetched;
}
printf("Selected %d employees\n", rows_fetched_total);
sqlo_close(sth);
return 1;
}
void print_record(result_t * r )
{
printf("Name=%-8s Salary= %6.2f\n",
(r->name_ind == SQLO_NULL_IND ? "NULL" : r->name),
(r->sal_ind == SQLO_NULL_IND ? -1.0 : r->salary));
}