Improved dataset printing
This commit is contained in:
@@ -1307,20 +1307,15 @@ static inline int sql_is_insert(const char *sql) {
|
|||||||
|
|
||||||
static void print_dataset(ErlDrvTermData *dataset, int term_count) {
|
static void print_dataset(ErlDrvTermData *dataset, int term_count) {
|
||||||
int i = 0, stack_size = 0;
|
int i = 0, stack_size = 0;
|
||||||
|
ErlDrvUInt length;
|
||||||
|
|
||||||
printf("\nPrinting dataset\n");
|
printf("\nPrinting dataset\n");
|
||||||
while (i < term_count) {
|
while (i < term_count) {
|
||||||
switch (dataset[i]) {
|
switch (dataset[i]) {
|
||||||
case ERL_DRV_NIL:
|
case ERL_DRV_NIL:
|
||||||
if (dataset[i+1] == ERL_DRV_LIST) {
|
|
||||||
printf("%d-%d: proper list, length %lu\n", i, i+2, (ErlDrvUInt) dataset[i+2]-1);
|
|
||||||
i += 3;
|
|
||||||
stack_size -= (ErlDrvUInt) dataset[i+2]-1;
|
|
||||||
} else {
|
|
||||||
printf("%d: []\n", i);
|
printf("%d: []\n", i);
|
||||||
i++;
|
i++;
|
||||||
stack_size++;
|
stack_size++;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case ERL_DRV_ATOM:
|
case ERL_DRV_ATOM:
|
||||||
printf("%d-%d: an atom\n", i, i+1);
|
printf("%d-%d: an atom\n", i, i+1);
|
||||||
@@ -1354,14 +1349,16 @@ static void print_dataset(ErlDrvTermData *dataset, int term_count) {
|
|||||||
stack_size++;
|
stack_size++;
|
||||||
break;
|
break;
|
||||||
case ERL_DRV_TUPLE:
|
case ERL_DRV_TUPLE:
|
||||||
printf("%d-%d: a tuple (size %lu)\n", i, i+1, (ErlDrvUInt) dataset[i+1]);
|
length = (ErlDrvUInt) dataset[i+1];
|
||||||
|
printf("%d-%d: a tuple (size %lu)\n", i, i+1, length);
|
||||||
i += 2;
|
i += 2;
|
||||||
stack_size -= (ErlDrvUInt) dataset[i+1];
|
stack_size -= length - 1;
|
||||||
break;
|
break;
|
||||||
case ERL_DRV_LIST:
|
case ERL_DRV_LIST:
|
||||||
printf("%d-%d: an improper list (length %lu)\n", i, i+1, (ErlDrvUInt) dataset[i+1]);
|
length = (ErlDrvUInt) dataset[i+1];
|
||||||
|
printf("%d-%d: a list (length %lu)\n", i, i+1, length);
|
||||||
i += 2;
|
i += 2;
|
||||||
stack_size -= (ErlDrvUInt) dataset[i+1];
|
stack_size -= length - 1;
|
||||||
break;
|
break;
|
||||||
case ERL_DRV_PID:
|
case ERL_DRV_PID:
|
||||||
printf("%d-%d: a pid\n", i, i+1);
|
printf("%d-%d: a pid\n", i, i+1);
|
||||||
@@ -1369,9 +1366,10 @@ static void print_dataset(ErlDrvTermData *dataset, int term_count) {
|
|||||||
stack_size++;
|
stack_size++;
|
||||||
break;
|
break;
|
||||||
case ERL_DRV_STRING_CONS:
|
case ERL_DRV_STRING_CONS:
|
||||||
printf("%d-%d: a string inside surrounding list (length %lu)\n", i, i+2, (ErlDrvUInt) dataset[i+2]);
|
length = (ErlDrvUInt) dataset[i+2];
|
||||||
|
printf("%d-%d: a string inside surrounding list (length %lu)\n", i, i+2, length);
|
||||||
i += 3;
|
i += 3;
|
||||||
stack_size += (ErlDrvUInt) dataset[i+2];
|
stack_size += length;
|
||||||
break;
|
break;
|
||||||
case ERL_DRV_FLOAT:
|
case ERL_DRV_FLOAT:
|
||||||
printf("%d-%d: float %f\n", i, i+1, (double) dataset[i+1]);
|
printf("%d-%d: float %f\n", i, i+1, (double) dataset[i+1]);
|
||||||
|
|||||||
Reference in New Issue
Block a user