Fixed bug in resultset_make_row
Addition of resultset_stream_json
This commit is contained in:
@ -153,7 +153,7 @@ int i;
|
|||||||
if ((row = (RESULT_ROW *)malloc(sizeof(RESULT_ROW))) == NULL)
|
if ((row = (RESULT_ROW *)malloc(sizeof(RESULT_ROW))) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
row->n_cols = set->n_cols;
|
row->n_cols = set->n_cols;
|
||||||
if ((row->cols = (char **)malloc(sizeof(char *))) == NULL)
|
if ((row->cols = (char **)malloc(row->n_cols * sizeof(char *))) == NULL)
|
||||||
{
|
{
|
||||||
free(row);
|
free(row);
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -401,3 +401,41 @@ uint8_t *ptr;
|
|||||||
|
|
||||||
return dcb->func.write(dcb, pkt);
|
return dcb->func.write(dcb, pkt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stream a result set encoding it as a JSON object
|
||||||
|
* Each row is retrieved by calling the function passed in the
|
||||||
|
* argument list.
|
||||||
|
*
|
||||||
|
* @param set The result set to stream
|
||||||
|
* @param dcb The connection to stream the result set to
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
resultset_stream_json(RESULTSET *set, DCB *dcb)
|
||||||
|
{
|
||||||
|
RESULT_COLUMN *col;
|
||||||
|
RESULT_ROW *row;
|
||||||
|
|
||||||
|
|
||||||
|
dcb_printf(dcb, "{ ");
|
||||||
|
col = set->column;
|
||||||
|
while ((row = (*set->fetchrow)(set, set->userdata)) != NULL)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
while (col)
|
||||||
|
{
|
||||||
|
|
||||||
|
dcb_printf(dcb, "\"%s\" : ", col->name);
|
||||||
|
if (row->cols[i])
|
||||||
|
dcb_printf(dcb, "\"%s\"", row->cols[i]);
|
||||||
|
else
|
||||||
|
dcb_printf(dcb, "NULL");
|
||||||
|
i++;
|
||||||
|
col = col->next;
|
||||||
|
if (col)
|
||||||
|
dcb_printf(dcb, ", ");
|
||||||
|
}
|
||||||
|
resultset_free_row(row);
|
||||||
|
}
|
||||||
|
dcb_printf(dcb, "}\n");
|
||||||
|
}
|
||||||
|
|||||||
@ -84,4 +84,5 @@ extern RESULT_ROW *resultset_make_row(RESULTSET *);
|
|||||||
extern void resultset_free_row(RESULT_ROW *);
|
extern void resultset_free_row(RESULT_ROW *);
|
||||||
extern int resultset_row_set(RESULT_ROW *, int, char *);
|
extern int resultset_row_set(RESULT_ROW *, int, char *);
|
||||||
extern void resultset_stream_mysql(RESULTSET *, DCB *);
|
extern void resultset_stream_mysql(RESULTSET *, DCB *);
|
||||||
|
extern void resultset_stream_json(RESULTSET *, DCB *);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user