static int test_map(void) { avro_schema_t schema = avro_schema_map(avro_schema_long()); avro_datum_t datum = avro_map(schema); int64_t i = 0; char *nums[] = { "zero", "one", "two", "three", "four", "five", "six", NULL }; while (nums[i]) { avro_datum_t i_datum = avro_int64(i); avro_map_set(datum, nums[i], i_datum); avro_datum_decref(i_datum); i++; } if (avro_array_size(datum) != 7) { fprintf(stderr, "Unexpected map size\n"); exit(EXIT_FAILURE); } avro_datum_t value; const char *key; avro_map_get_key(datum, 2, &key); avro_map_get(datum, key, &value); int64_t val; avro_int64_get(value, &val); if (val != 2) { fprintf(stderr, "Unexpected map value 2\n"); exit(EXIT_FAILURE); } int index; if (avro_map_get_index(datum, "two", &index)) { fprintf(stderr, "Can't get index for key \"two\": %s\n", avro_strerror()); exit(EXIT_FAILURE); } if (index != 2) { fprintf(stderr, "Unexpected index for key \"two\"\n"); exit(EXIT_FAILURE); } if (!avro_map_get_index(datum, "foobar", &index)) { fprintf(stderr, "Unexpected index for key \"foobar\"\n"); exit(EXIT_FAILURE); } write_read_check(schema, datum, NULL, NULL, "map"); test_json(datum, "{\"zero\": 0, \"one\": 1, \"two\": 2, \"three\": 3, " "\"four\": 4, \"five\": 5, \"six\": 6}"); avro_datum_decref(datum); avro_schema_decref(schema); return 0; }
static int avro_datum_value_get_long(const avro_value_iface_t *iface, const void *vself, int64_t *out) { AVRO_UNUSED(iface); const avro_datum_t self = (const avro_datum_t) vself; check_param(EINVAL, self, "datum instance"); int rval; int64_t value; check(rval, avro_int64_get(self, &value)); *out = value; return 0; }
/*输出数据库中的学生信息*/ int show_student(avro_file_reader_t db, avro_schema_t reader_schema) { int rval; avro_datum_t student; rval = avro_file_reader_read(db, reader_schema, &student); if (rval == 0) { int64_t i64; int32_t i32; char *p; avro_datum_t sid_datum, name_datum, dept_datum, phone_datum, age_datum; if (avro_record_get(student, "SID", &sid_datum) == 0) { avro_int64_get(sid_datum, &i64); fprintf(stdout, "%"PRId64" ", i64); } if (avro_record_get(student, "Name", &name_datum) == 0) { avro_string_get(name_datum, &p); fprintf(stdout, "%12s ", p); } if (avro_record_get(student, "Dept", &dept_datum) == 0) { avro_string_get(dept_datum, &p); fprintf(stdout, "%12s ", p); } if (avro_record_get(student, "Phone", &phone_datum) == 0) { avro_string_get(phone_datum, &p); fprintf(stdout, "%12s ", p); } if (avro_record_get(student, "Age", &age_datum) == 0) { avro_int32_get(age_datum, &i32); fprintf(stdout, "%d", i32); } fprintf(stdout, "\n"); /*释放记录*/ avro_datum_decref(student); } return rval; }