From: Alexander Nozdrin Date: April 15 2011 9:39am Subject: bzr commit into mysql-trunk branch (alexander.nozdrin:3322) WL#5787 List-Archive: http://lists.mysql.com/commits/135515 Message-Id: <201104150944.p3F9idKT024921@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5176281161113279020==" --===============5176281161113279020== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/alik/MySQL/bzr/00/wl5787/mysql-trunk-wl5787.2/ based on revid:alexander.nozdrin@stripped 3322 Alexander Nozdrin 2011-04-15 Preliminary patch for WL#5787: add missing files. added: sql/item_inetfunc.cc sql/item_inetfunc.h === added file 'sql/item_inetfunc.cc' --- a/sql/item_inetfunc.cc 1970-01-01 00:00:00 +0000 +++ b/sql/item_inetfunc.cc 2011-04-15 09:39:46 +0000 @@ -0,0 +1,118 @@ +/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + +#include "item_inetfunc.h" + +#include "violite.h" // vio_getnameinfo() + +/////////////////////////////////////////////////////////////////////////// + +longlong Item_func_inet_aton::val_int() +{ + DBUG_ASSERT(fixed == 1); + uint byte_result = 0; + ulonglong result = 0; // We are ready for 64 bit addresses + const char *p,* end; + char c = '.'; // we mark c to indicate invalid IP in case length is 0 + char buff[36]; + int dot_count= 0; + + String *s, tmp(buff, sizeof(buff), &my_charset_latin1); + if (!(s = args[0]->val_str_ascii(&tmp))) // If null value + goto err; + null_value=0; + + end= (p = s->ptr()) + s->length(); + while (p < end) + { + c = *p++; + int digit = (int) (c - '0'); + if (digit >= 0 && digit <= 9) + { + if ((byte_result = byte_result * 10 + digit) > 255) + goto err; // Wrong address + } + else if (c == '.') + { + dot_count++; + result= (result << 8) + (ulonglong) byte_result; + byte_result = 0; + } + else + goto err; // Invalid character + } + if (c != '.') // IP number can't end on '.' + { + /* + Handle short-forms addresses according to standard. Examples: + 127 -> 0.0.0.127 + 127.1 -> 127.0.0.1 + 127.2.1 -> 127.2.0.1 + */ + switch (dot_count) { + case 1: result<<= 8; /* Fall through */ + case 2: result<<= 8; /* Fall through */ + } + return (result << 8) + (ulonglong) byte_result; + } + +err: + null_value=1; + return 0; +} + +/////////////////////////////////////////////////////////////////////////// + +String* Item_func_inet_ntoa::val_str(String* str) +{ + DBUG_ASSERT(fixed == 1); + uchar buf[8], *p; + ulonglong n = (ulonglong) args[0]->val_int(); + char num[4]; + + /* + We do not know if args[0] is NULL until we have called + some val function on it if args[0] is not a constant! + + Also return null if n > 255.255.255.255 + */ + if ((null_value= (args[0]->null_value || n > (ulonglong) LL(4294967295)))) + return 0; // Null value + + str->set_charset(collation.collation); + str->length(0); + int4store(buf,n); + + /* Now we can assume little endian. */ + + num[3]='.'; + for (p=buf+4 ; p-- > buf ; ) + { + uint c = *p; + uint n1,n2; // Try to avoid divisions + n1= c / 100; // 100 digits + c-= n1*100; + n2= c / 10; // 10 digits + c-=n2*10; // last digit + num[0]=(char) n1+'0'; + num[1]=(char) n2+'0'; + num[2]=(char) c+'0'; + uint length= (n1 ? 4 : n2 ? 3 : 2); // Remove pre-zero + uint dot_length= (p <= buf) ? 1 : 0; + (void) str->append(num + 4 - length, length - dot_length, + &my_charset_latin1); + } + return str; +} === added file 'sql/item_inetfunc.h' --- a/sql/item_inetfunc.h 1970-01-01 00:00:00 +0000 +++ b/sql/item_inetfunc.h 2011-04-15 09:39:46 +0000 @@ -0,0 +1,74 @@ +#ifndef ITEM_INETFUNC_INCLUDED +#define ITEM_INETFUNC_INCLUDED + +/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ + + +#include "item.h" + +/************************************************************************* + Item_func_inet_aton implements INET_ATON() SQL-function. +*************************************************************************/ + +class Item_func_inet_aton : public Item_int_func +{ +public: + inline Item_func_inet_aton(Item *arg) + : Item_int_func(arg) + {} + +public: + virtual longlong val_int(); + + virtual const char *func_name() const + { return "inet_aton"; } + + virtual void fix_length_and_dec() + { + decimals= 0; + max_length= 21; + maybe_null= 1; + unsigned_flag= 1; + } +}; + + +/************************************************************************* + Item_func_inet_ntoa implements INET_NTOA() SQL-function. +*************************************************************************/ + +class Item_func_inet_ntoa : public Item_str_func +{ +public: + inline Item_func_inet_ntoa(Item *arg) + : Item_str_func(arg) + { } + +public: + virtual String* val_str(String* str); + + virtual const char *func_name() const + { return "inet_ntoa"; } + + virtual void fix_length_and_dec() + { + decimals= 0; + fix_length_and_charset(3 * 8 + 7, default_charset()); + maybe_null= 1; + } +}; + +#endif // ITEM_INETFUNC_INCLUDED --===============5176281161113279020== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/alexander.nozdrin@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: alexander.nozdrin@stripped\ # 2ltfssbkvqcg6eu5 # target_branch: file:///home/alik/MySQL/bzr/00/wl5787/mysql-trunk-\ # wl5787.2/ # testament_sha1: 2aad084cdfe81b440f59e577eb9bf40899fe79c0 # timestamp: 2011-04-15 13:39:50 +0400 # source_branch: file:///home/alik/MySQL/bzr/00/wl5787/mysql-trunk-\ # wl5787/ # base_revision_id: alexander.nozdrin@stripped\ # 838p6rdv9fpoh9dp # # Begin bundle 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 --===============5176281161113279020==--