char* Field::mutable_value_as_null_string() const { Internal::check_type(NULL_STRING, type()); char* cs; throw_if_error(ib_field_mutable_value(ib(), ib_ftype_nulstr_mutable_out(&cs) )); return cs; }
TEST_F(TestIBUtilField, Alias) { ib_num_t num1; ib_num_t num2; ib_float_t flt1; ib_float_t flt2; char *s = NULL; const char *v; ib_field_t *f; ib_status_t rc; rc = ib_field_create_alias(&f, MM(), "foo", 3, IB_FTYPE_NULSTR, ib_ftype_nulstr_mutable_out(&s)); ASSERT_EQ(IB_OK, rc); v = "hello"; rc = ib_field_setv(f, ib_ftype_nulstr_in(v)); ASSERT_EQ(IB_OK, rc); ASSERT_STREQ(v, s); /* * Alias a numeric field */ num1 = 1; rc = ib_field_create_alias(&f, MM(), "num", 3, IB_FTYPE_NUM, ib_ftype_num_in(&num1)); ASSERT_EQ(IB_OK, rc); rc = ib_field_value(f, ib_ftype_num_out(&num2)); ASSERT_EQ(IB_OK, rc); ASSERT_EQ(num1, num2); num1 = 3; rc = ib_field_value(f, ib_ftype_num_out(&num2)); ASSERT_EQ(IB_OK, rc); ASSERT_EQ(num1, num2); /* * Alias a floating point field */ flt1 = 1.1; rc = ib_field_create_alias(&f, MM(), "flt", 3, IB_FTYPE_FLOAT, ib_ftype_float_in(&flt1)); ASSERT_EQ(IB_OK, rc); rc = ib_field_value(f, ib_ftype_float_out(&flt2)); ASSERT_EQ(IB_OK, rc); ASSERT_EQ(flt1, flt2); flt1 = 1.5; rc = ib_field_value(f, ib_ftype_float_out(&flt2)); ASSERT_EQ(IB_OK, rc); ASSERT_EQ(flt1, flt2); }
TEST_F(TestIBUtilField, Alias) { char *s = NULL; const char *v; ib_field_t *f; ib_status_t rc; rc = ib_field_create_alias(&f, MemPool(), "foo", 3, IB_FTYPE_NULSTR, ib_ftype_nulstr_mutable_out(&s)); ASSERT_EQ(IB_OK, rc); v = "hello"; rc = ib_field_setv(f, ib_ftype_nulstr_in(v)); ASSERT_EQ(IB_OK, rc); ASSERT_EQ(std::string(v), std::string(s)); }
TEST_F(TestIBUtilField, AliasConvert) { char *str; ib_field_t *f1; ib_field_t *f2; ib_status_t rc; ib_num_t num; ib_float_t flt; /* * Convert numeric string to number */ /* Copy a number into the string */ str = ib_mm_strdup(MM(), "1"); ASSERT_TRUE(str != NULL); /* Create the aliased field */ rc = ib_field_create_alias(&f1, MM(), "one", 3, IB_FTYPE_NULSTR, ib_ftype_nulstr_mutable_out(&str)); ASSERT_EQ(IB_OK, rc); /* Attempt a numeric conversion. */ rc = ib_field_convert(MM(), IB_FTYPE_NUM, f1, &f2); ASSERT_EQ(IB_OK, rc); /* Pull out param value for check. */ rc = ib_field_value(f2, ib_ftype_num_out(&num)); ASSERT_EQ(IB_OK, rc); ASSERT_EQ(1, num); /* * Convert floating-point string to float */ /* Copy a number into the string */ str = ib_mm_strdup(MM(), "1.1"); ASSERT_TRUE(str != NULL); /* Create the aliased field */ rc = ib_field_create_alias(&f1, MM(), "one", 3, IB_FTYPE_NULSTR, ib_ftype_nulstr_mutable_out(&str)); ASSERT_EQ(IB_OK, rc); /* Attempt a numeric conversion. */ rc = ib_field_convert(MM(), IB_FTYPE_FLOAT, f1, &f2); ASSERT_EQ(IB_OK, rc); /* Pull out param value for check. */ rc = ib_field_value(f2, ib_ftype_float_out(&flt)); ASSERT_EQ(IB_OK, rc); ASSERT_FLOAT_EQ(1.1, flt); /* * Convert non-numeric string to number */ /* Copy a number into the string */ str = ib_mm_strdup(MM(), "x1"); ASSERT_TRUE(str != NULL); /* Create the aliased field */ rc = ib_field_create_alias(&f1, MM(), "one", 3, IB_FTYPE_NULSTR, ib_ftype_nulstr_mutable_out(&str)); ASSERT_EQ(IB_OK, rc); /* Attempt a numeric conversion. */ rc = ib_field_convert(MM(), IB_FTYPE_NUM, f1, &f2); ASSERT_EQ(IB_EINVAL, rc); /* * Convert floating-point string to number */ /* Copy a number into the string */ str = ib_mm_strdup(MM(), "1.1"); ASSERT_TRUE(str != NULL); /* Create the aliased field */ rc = ib_field_create_alias(&f1, MM(), "one", 3, IB_FTYPE_NULSTR, ib_ftype_nulstr_mutable_out(&str)); ASSERT_EQ(IB_OK, rc); /* Attempt a numeric conversion. */ rc = ib_field_convert(MM(), IB_FTYPE_NUM, f1, &f2); ASSERT_EQ(IB_EINVAL, rc); /* * Convert non-numeric string to float */ /* Copy a number into the string */ str = ib_mm_strdup(MM(), "1.1"); ASSERT_TRUE(str != NULL); /* Create the aliased field */ rc = ib_field_create_alias(&f1, MM(), "one", 3, IB_FTYPE_NULSTR, ib_ftype_nulstr_mutable_out(&str)); ASSERT_EQ(IB_OK, rc); /* Attempt a numeric conversion. */ rc = ib_field_convert(MM(), IB_FTYPE_FLOAT, f1, &f2); ASSERT_EQ(IB_OK, rc); /* Pull out param value for check. */ rc = ib_field_value(f2, ib_ftype_float_out(&flt)); ASSERT_EQ(IB_OK, rc); ASSERT_FLOAT_EQ(1.1, flt); }