30 #include <drizzled/field/ipv6.h>
32 #include <drizzled/error.h>
33 #include <drizzled/internal/my_sys.h>
34 #include <drizzled/session.h>
35 #include <drizzled/table.h>
42 IPv6::IPv6(
unsigned char *ptr_arg,
44 unsigned char *null_ptr_arg,
45 unsigned char null_bit_arg,
46 const char *field_name_arg) :
47 Field(ptr_arg, len_arg,
55 int IPv6::cmp(
const unsigned char *a,
const unsigned char *b)
57 return memcmp(a, b, max_string_length());
60 int IPv6::store(
const char *from, uint32_t,
const charset_info_st *
const )
62 ASSERT_COLUMN_MARKED_FOR_WRITE;
63 type::IPv6 ptr_address;
65 if (not ptr_address.inet_pton(from))
67 my_error(ER_INVALID_IPV6_VALUE, MYF(ME_FATALERROR));
71 ptr_address.store_object(
ptr);
76 int IPv6::store(int64_t ,
bool )
78 ASSERT_COLUMN_MARKED_FOR_WRITE;
79 my_error(ER_INVALID_IPV6_VALUE, MYF(ME_FATALERROR));
85 ASSERT_COLUMN_MARKED_FOR_WRITE;
86 my_error(ER_INVALID_IPV6_VALUE, MYF(ME_FATALERROR));
90 void IPv6::sql_type(String &res)
const
92 res.set_ascii(STRING_WITH_LEN(
"ipv6"));
95 double IPv6::val_real()
const
97 ASSERT_COLUMN_MARKED_FOR_READ;
98 my_error(ER_INVALID_IPV6_VALUE, MYF(ME_FATALERROR));
102 int64_t IPv6::val_int()
const
104 ASSERT_COLUMN_MARKED_FOR_READ;
105 my_error(ER_INVALID_IPV6_VALUE, MYF(ME_FATALERROR));
109 String *IPv6::val_str(String *val_buffer, String *)
const
111 const charset_info_st *
const cs= &my_charset_bin;
112 uint32_t mlength= (type::IPv6::IPV6_BUFFER_LENGTH) * cs->mbmaxlen;
113 type::IPv6 ptr_address;
115 val_buffer->alloc(mlength);
116 char *buffer=(
char*) val_buffer->ptr();
118 ASSERT_COLUMN_MARKED_FOR_READ;
120 ptr_address.restore_object(
ptr);
121 ptr_address.inet_ntop(buffer);
123 val_buffer->length(type::IPv6::IPV6_DISPLAY_LENGTH);
128 void IPv6::sort_string(
unsigned char *to, uint32_t length_arg)
130 assert(length_arg == type::IPv6::LENGTH);
131 memcpy(to,
ptr, length_arg);