void tc_print_tuple(struct tnt_tuple *tu) { struct tnt_iter ifl; tnt_iter(&ifl, tu); printf("["); while (tnt_next(&ifl)) { if (TNT_IFIELD_IDX(&ifl) != 0) printf(", "); char *data = TNT_IFIELD_DATA(&ifl); uint32_t size = TNT_IFIELD_SIZE(&ifl); if (!isprint(data[0]) && (size == 4 || size == 8)) { if (size == 4) { uint32_t i = *((uint32_t*)data); printf("%"PRIu32, i); } else { uint64_t i = *((uint64_t*)data); printf("%"PRIu64, i); } } else { printf("'%-.*s'", size, data); } } if (ifl.status == TNT_ITER_FAIL) printf("<parsing error>"); printf("]\n"); tnt_iter_free(&ifl); }
/* * tnt_field() * * set or create iterator to the specified tuple field; * * i - tuple iterator pointer * t - tuple pointer * index - tuple field index * * returns tuple iterator pointer if field found, NULL otherwise. */ struct tnt_iter* tnt_field(struct tnt_iter *i, struct tnt_tuple *t, uint32_t index) { int allocated = i == NULL; if (i == NULL) { i = tnt_iter(i, t); if (i == NULL) return NULL; } else tnt_rewind(i); while (tnt_next(i)) if (TNT_IFIELD_IDX(i) == index) return i; if (allocated) tnt_iter_free(i); return NULL; }
void print_tuple(struct tnt_tuple *tuple) { bool is_first = true; printf("("); struct tnt_iter ifl; tnt_iter(&ifl, tuple); while (tnt_next(&ifl)) { char *data = TNT_IFIELD_DATA(&ifl); uint32_t size = TNT_IFIELD_SIZE(&ifl); if (!is_first) { printf(", "); } is_first = false; switch(size) { case 1: printf("%"PRIi8" (0x%02"PRIx8")", *(int8_t *)data, *(int8_t *)data); break; case 2: printf("%"PRIi16" (0x%04"PRIx16")", *(int16_t *)data, *(int16_t *)data); break; case 4: printf("%"PRIi32" (0x%08"PRIx32")", *(int32_t *)data, *(int32_t *)data); break; case 8: printf("%"PRIi64" (0x%016"PRIx64")", *(int64_t *)data, *(int64_t *)data); break; default: printf("'%.*s'", size, data); break; } } fail_if(ifl.status == TNT_ITER_FAIL); tnt_iter_free(&ifl); printf(")\n"); }