Drizzled Public API Documentation

ipv6.cc
00001 /*
00002   Original copyright header listed below. This comes via rsync.
00003   Any additional changes are provided via the same license as the original.
00004 
00005   Copyright (C) 2011 Muhammad Umair
00006 
00007 */
00008 /*
00009  * Copyright (C) 1996-2001  Internet Software Consortium.
00010  *
00011  * Permission to use, copy, modify, and distribute this software for any
00012  * purpose with or without fee is hereby granted, provided that the above
00013  * copyright notice and this permission notice appear in all copies.
00014  *
00015  * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
00016  * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
00017  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
00018  * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
00019  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
00020  * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
00021  * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
00022  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
00023  */
00024 
00025 
00026 #include "config.h"
00027 
00028 #include <algorithm>
00029 
00030 #include <drizzled/field/ipv6.h>
00031 
00032 #include <drizzled/error.h>
00033 #include <drizzled/internal/my_sys.h>
00034 #include <drizzled/session.h>
00035 #include <drizzled/table.h>
00036 
00037 namespace drizzled
00038 {
00039 namespace field
00040 {
00041 
00042 IPv6::IPv6(unsigned char *ptr_arg,
00043            uint32_t len_arg,
00044            unsigned char *null_ptr_arg,
00045            unsigned char null_bit_arg,
00046            const char *field_name_arg) :
00047   Field(ptr_arg, len_arg,
00048         null_ptr_arg,
00049         null_bit_arg,
00050         Field::NONE,
00051         field_name_arg)
00052 {
00053 }
00054 
00055 int IPv6::cmp(const unsigned char *a, const unsigned char *b)
00056 {
00057   return memcmp(a, b, max_string_length());
00058 }
00059   
00060 int IPv6::store(const char *from, uint32_t, const charset_info_st * const )
00061 {
00062   ASSERT_COLUMN_MARKED_FOR_WRITE;
00063   type::IPv6 ptr_address;
00064 
00065   if (not ptr_address.inet_pton(from))
00066   {
00067     my_error(ER_INVALID_IPV6_VALUE, MYF(ME_FATALERROR));
00068     return 1;
00069   }
00070 
00071  ptr_address.store_object(ptr);
00072 
00073   return 0;
00074 }
00075 
00076 int IPv6::store(int64_t , bool )
00077 {
00078   ASSERT_COLUMN_MARKED_FOR_WRITE;
00079   my_error(ER_INVALID_IPV6_VALUE, MYF(ME_FATALERROR));
00080   return 1;
00081 }
00082 
00083 int IPv6::store_decimal(const drizzled::type::Decimal*)
00084 {
00085   ASSERT_COLUMN_MARKED_FOR_WRITE;
00086   my_error(ER_INVALID_IPV6_VALUE, MYF(ME_FATALERROR));
00087   return 1;
00088 }
00089 
00090 void IPv6::sql_type(String &res) const
00091 {
00092   res.set_ascii(STRING_WITH_LEN("ipv6"));
00093 }
00094 
00095 double IPv6::val_real() const
00096 {
00097   ASSERT_COLUMN_MARKED_FOR_READ;
00098   my_error(ER_INVALID_IPV6_VALUE, MYF(ME_FATALERROR));
00099   return 0;
00100 }
00101 
00102 int64_t IPv6::val_int() const
00103 {
00104   ASSERT_COLUMN_MARKED_FOR_READ;
00105   my_error(ER_INVALID_IPV6_VALUE, MYF(ME_FATALERROR));
00106   return 0;
00107 }
00108 
00109 String *IPv6::val_str(String *val_buffer, String *) const
00110 {
00111   const charset_info_st * const cs= &my_charset_bin;
00112   uint32_t mlength= (type::IPv6::IPV6_BUFFER_LENGTH)  * cs->mbmaxlen;  
00113   type::IPv6 ptr_address;
00114 
00115   val_buffer->alloc(mlength);
00116   char *buffer=(char*) val_buffer->ptr();
00117  
00118   ASSERT_COLUMN_MARKED_FOR_READ;
00119 
00120   ptr_address.restore_object(ptr);  
00121   ptr_address.inet_ntop(buffer);
00122 
00123   val_buffer->length(type::IPv6::IPV6_DISPLAY_LENGTH);
00124 
00125   return val_buffer;
00126 }
00127 
00128 void IPv6::sort_string(unsigned char *to, uint32_t length_arg)
00129 {
00130   assert(length_arg == type::IPv6::LENGTH);
00131   memcpy(to, ptr, length_arg);
00132 }
00133 
00134 } /* namespace field */
00135 } /* namespace drizzled */
00136