Drizzled Public API Documentation

display.cc
00001 /* - mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*-
00002  *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
00003  *
00004  *  Copyright (C) 2010 Brian Aker
00005  *
00006  *  This program is free software; you can redistribute it and/or modify
00007  *  it under the terms of the GNU General Public License as published by
00008  *  the Free Software Foundation; either version 2 of the License, or
00009  *  (at your option) any later version.
00010  *
00011  *  This program is distributed in the hope that it will be useful,
00012  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  *  GNU General Public License for more details.
00015  *
00016  *  You should have received a copy of the GNU General Public License
00017  *  along with this program; if not, write to the Free Software
00018  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00019  */
00020 
00021 #include <config.h>
00022 
00023 #include <drizzled/display.h>
00024 #include <drizzled/item.h>
00025 
00026 #include <cassert>
00027 #include <iostream>
00028 #include <sstream>
00029 
00030 namespace drizzled {
00031 namespace display {
00032 
00033 static const std::string PROGRAM_ERROR("PROGRAM_ERROR");
00034 
00035 static const std::string COM_SLEEP("COM_SLEEP"); 
00036 static const std::string COM_QUIT("COM_QUIT"); 
00037 static const std::string COM_USE_SCHEMA("COM_USE_SCHEMA"); 
00038 static const std::string COM_QUERY("COM_QUERY"); 
00039 static const std::string COM_SHUTDOWN("COM_SHUTDOWN"); 
00040 static const std::string COM_CONNECT("COM_CONNECT"); 
00041 static const std::string COM_PING("COM_PING"); 
00042 static const std::string COM_END("COM_END"); 
00043 
00044 static const std::string DRIZZLE_TYPE_LONG("DRIZZLE_TYPE_LONG"); 
00045 static const std::string DRIZZLE_TYPE_DOUBLE("DRIZZLE_TYPE_DOUBLE"); 
00046 static const std::string DRIZZLE_TYPE_NULL("DRIZZLE_TYPE_NULL"); 
00047 static const std::string DRIZZLE_TYPE_TIMESTAMP("DRIZZLE_TYPE_TIMESTAMP"); 
00048 static const std::string DRIZZLE_TYPE_MICROTIME("DRIZZLE_TYPE_MICROTIME"); 
00049 static const std::string DRIZZLE_TYPE_LONGLONG("DRIZZLE_TYPE_LONGLONG"); 
00050 static const std::string DRIZZLE_TYPE_DATETIME("DRIZZLE_TYPE_DATETIME"); 
00051 static const std::string DRIZZLE_TYPE_TIME("DRIZZLE_TYPE_TIME"); 
00052 static const std::string DRIZZLE_TYPE_DATE("DRIZZLE_TYPE_DATE"); 
00053 static const std::string DRIZZLE_TYPE_VARCHAR("DRIZZLE_TYPE_VARCHAR"); 
00054 static const std::string DRIZZLE_TYPE_DECIMAL("DRIZZLE_TYPE_DECIMAL"); 
00055 static const std::string DRIZZLE_TYPE_ENUM("DRIZZLE_TYPE_ENUM"); 
00056 static const std::string DRIZZLE_TYPE_BLOB("DRIZZLE_TYPE_BLOB"); 
00057 static const std::string DRIZZLE_TYPE_UUID("DRIZZLE_TYPE_UUID"); 
00058 static const std::string DRIZZLE_TYPE_BOOLEAN("DRIZZLE_TYPE_BOOLEAN"); 
00059 static const std::string DRIZZLE_TYPE_IPV6("DRIZZLE_TYPE_IPV6"); 
00060 
00061 static const std::string FIELD_ITEM("FIELD_ITEM");
00062 static const std::string FUNC_ITEM("FUNC_ITEM");
00063 static const std::string SUM_FUNC_ITEM("SUM_FUNC_ITEM");
00064 static const std::string STRING_ITEM("STRING_ITEM");
00065 static const std::string INT_ITEM("INT_ITEM");
00066 static const std::string REAL_ITEM("REAL_ITEM");
00067 static const std::string NULL_ITEM("NULL_ITEM");
00068 static const std::string VARBIN_ITEM("VARBIN_ITEM");
00069 static const std::string COPY_STR_ITEM("COPY_STR_ITEM");
00070 static const std::string FIELD_AVG_ITEM("FIELD_AVG_ITEM");
00071 static const std::string DEFAULT_VALUE_ITEM("DEFAULT_VALUE_ITEM");
00072 static const std::string PROC_ITEM("PROC_ITEM");
00073 static const std::string COND_ITEM("COND_ITEM");
00074 static const std::string REF_ITEM("REF_ITEM");
00075 static const std::string FIELD_STD_ITEM("FIELD_STD_ITEM");
00076 static const std::string FIELD_VARIANCE_ITEM("FIELD_VARIANCE_ITEM");
00077 static const std::string INSERT_VALUE_ITEM("INSERT_VALUE_ITEM");
00078 static const std::string SUBSELECT_ITEM("SUBSELECT_ITEM");
00079 static const std::string ROW_ITEM("ROW_ITEM");
00080 static const std::string CACHE_ITEM("CACHE_ITEM");
00081 static const std::string TYPE_HOLDER("TYPE_HOLDER");
00082 static const std::string PARAM_ITEM("PARAM_ITEM");
00083 static const std::string BOOLEAN_ITEM("BOOLEAN_ITEM");
00084 static const std::string DECIMAL_ITEM("DECIMAL_ITEM");
00085 
00086 static const std::string ITEM_CAST_SIGNED("ITEM_CAST_SIGNED");
00087 static const std::string ITEM_CAST_UNSIGNED("ITEM_CAST_UNSIGNED");
00088 static const std::string ITEM_CAST_BINARY("ITEM_CAST_BINARY");
00089 static const std::string ITEM_CAST_BOOLEAN("ITEM_CAST_BOOLEAN");
00090 static const std::string ITEM_CAST_DATE("ITEM_CAST_DATE");
00091 static const std::string ITEM_CAST_TIME("ITEM_CAST_TIME");
00092 static const std::string ITEM_CAST_DATETIME("ITEM_CAST_DATETIME");
00093 static const std::string ITEM_CAST_CHAR("ITEM_CAST_CHAR");
00094 static const std::string ITEM_CAST_DECIMAL("ITEM_CAST_DECIMAL");
00095 
00096 static const std::string STRING_RESULT_STRING("STRING");
00097 static const std::string REAL_RESULT_STRING("REAL");
00098 static const std::string INT_RESULT_STRING("INTEGER");
00099 static const std::string ROW_RESULT_STRING("ROW");
00100 static const std::string DECIMAL_RESULT_STRING("DECIMAL");
00101 
00102 static const std::string YES("YES");
00103 static const std::string NO("NO");
00104 
00105 const std::string &type(drizzled::Cast_target type)
00106 {
00107   switch (type)
00108   {
00109   case drizzled::ITEM_CAST_SIGNED:
00110     return ITEM_CAST_SIGNED;
00111   case drizzled::ITEM_CAST_UNSIGNED:
00112     return ITEM_CAST_UNSIGNED;
00113   case drizzled::ITEM_CAST_BINARY:
00114     return ITEM_CAST_BINARY;
00115   case drizzled::ITEM_CAST_BOOLEAN:
00116     return ITEM_CAST_BOOLEAN;
00117   case drizzled::ITEM_CAST_DATE:
00118     return ITEM_CAST_DATE;
00119   case drizzled::ITEM_CAST_TIME:
00120     return ITEM_CAST_TIME;
00121   case drizzled::ITEM_CAST_DATETIME:
00122     return ITEM_CAST_DATETIME;
00123   case drizzled::ITEM_CAST_CHAR:
00124     return ITEM_CAST_CHAR;
00125   case drizzled::ITEM_CAST_DECIMAL:
00126     return ITEM_CAST_DECIMAL;
00127   }
00128 
00129   abort();
00130 }
00131 
00132 const std::string &type(drizzled::enum_server_command type)
00133 {
00134   switch (type)
00135   {
00136   case drizzled::COM_SLEEP : 
00137     return COM_SLEEP;
00138 
00139   case drizzled::COM_KILL : 
00140     {
00141       static std::string COM_KILL("COM_KILL");
00142       return COM_KILL;
00143     }
00144 
00145   case drizzled::COM_QUIT : 
00146     return COM_QUIT;
00147 
00148   case drizzled::COM_USE_SCHEMA : 
00149     return COM_USE_SCHEMA;
00150 
00151   case drizzled::COM_QUERY : 
00152     return COM_QUERY;
00153 
00154   case drizzled::COM_SHUTDOWN : 
00155     return COM_SHUTDOWN;
00156 
00157   case drizzled::COM_CONNECT : 
00158     return COM_CONNECT;
00159 
00160   case drizzled::COM_PING : 
00161     return COM_PING;
00162 
00163   case drizzled::COM_END : 
00164     return COM_END;
00165   }
00166 
00167   assert(0);
00168   return PROGRAM_ERROR;
00169 }
00170 
00171 const std::string &type(drizzled::Item::Type type)
00172 {
00173   switch (type)
00174   {
00175   case drizzled::Item::FIELD_ITEM :
00176     return FIELD_ITEM;
00177   case drizzled::Item::FUNC_ITEM :
00178     return FUNC_ITEM;
00179   case drizzled::Item::SUM_FUNC_ITEM :
00180     return SUM_FUNC_ITEM;
00181   case drizzled::Item::STRING_ITEM :
00182     return STRING_ITEM;
00183   case drizzled::Item::INT_ITEM :
00184     return INT_ITEM;
00185   case drizzled::Item::REAL_ITEM :
00186     return REAL_ITEM;
00187   case drizzled::Item::NULL_ITEM :
00188     return NULL_ITEM;
00189   case drizzled::Item::VARBIN_ITEM :
00190     return VARBIN_ITEM;
00191   case drizzled::Item::COPY_STR_ITEM :
00192     return COPY_STR_ITEM;
00193   case drizzled::Item::FIELD_AVG_ITEM :
00194     return FIELD_AVG_ITEM;
00195   case drizzled::Item::DEFAULT_VALUE_ITEM :
00196     return DEFAULT_VALUE_ITEM;
00197   case drizzled::Item::PROC_ITEM :
00198     return PROC_ITEM;
00199   case drizzled::Item::COND_ITEM :
00200     return COND_ITEM;
00201   case drizzled::Item::REF_ITEM :
00202     return REF_ITEM;
00203   case drizzled::Item::FIELD_STD_ITEM :
00204     return FIELD_STD_ITEM;
00205   case drizzled::Item::FIELD_VARIANCE_ITEM :
00206     return FIELD_VARIANCE_ITEM;
00207   case drizzled::Item::INSERT_VALUE_ITEM :
00208     return INSERT_VALUE_ITEM;
00209   case drizzled::Item::SUBSELECT_ITEM :
00210     return SUBSELECT_ITEM;
00211   case drizzled::Item::ROW_ITEM:
00212     return ROW_ITEM;
00213   case drizzled::Item::CACHE_ITEM :
00214     return CACHE_ITEM;
00215   case drizzled::Item::TYPE_HOLDER :
00216     return TYPE_HOLDER;
00217   case drizzled::Item::PARAM_ITEM :
00218     return PARAM_ITEM;
00219   case drizzled::Item::BOOLEAN_ITEM :
00220     return BOOLEAN_ITEM;
00221   case drizzled::Item::DECIMAL_ITEM :
00222     return DECIMAL_ITEM;
00223   }
00224 
00225   assert(0);
00226   return PROGRAM_ERROR;
00227 }
00228 
00229 const std::string &type(Item_result type)
00230 {
00231   switch (type)
00232   {
00233   case STRING_RESULT:
00234     return STRING_RESULT_STRING;
00235   case REAL_RESULT:
00236     return REAL_RESULT_STRING;
00237   case INT_RESULT:
00238     return INT_RESULT_STRING;
00239   case ROW_RESULT:
00240     return ROW_RESULT_STRING;
00241   case DECIMAL_RESULT:
00242     return DECIMAL_RESULT_STRING;
00243   }
00244 
00245   assert(0);
00246   return PROGRAM_ERROR;
00247 }
00248 
00249 const std::string &type(drizzled::enum_field_types type)
00250 {
00251   switch (type)
00252   {
00253   case drizzled::DRIZZLE_TYPE_LONG : 
00254     return DRIZZLE_TYPE_LONG;
00255   case drizzled::DRIZZLE_TYPE_DOUBLE : 
00256     return DRIZZLE_TYPE_DOUBLE;
00257   case drizzled::DRIZZLE_TYPE_NULL : 
00258     return DRIZZLE_TYPE_NULL;
00259   case drizzled::DRIZZLE_TYPE_MICROTIME : 
00260     return DRIZZLE_TYPE_MICROTIME;
00261   case drizzled::DRIZZLE_TYPE_TIMESTAMP : 
00262     return DRIZZLE_TYPE_TIMESTAMP;
00263   case drizzled::DRIZZLE_TYPE_LONGLONG : 
00264     return DRIZZLE_TYPE_LONGLONG;
00265   case drizzled::DRIZZLE_TYPE_DATETIME : 
00266     return DRIZZLE_TYPE_DATETIME;
00267   case drizzled::DRIZZLE_TYPE_TIME : 
00268     return DRIZZLE_TYPE_TIME;
00269   case drizzled::DRIZZLE_TYPE_DATE : 
00270     return DRIZZLE_TYPE_DATE;
00271   case drizzled::DRIZZLE_TYPE_VARCHAR : 
00272     return DRIZZLE_TYPE_VARCHAR;
00273   case drizzled::DRIZZLE_TYPE_DECIMAL : 
00274     return DRIZZLE_TYPE_DECIMAL;
00275   case drizzled::DRIZZLE_TYPE_ENUM : 
00276     return DRIZZLE_TYPE_ENUM;
00277   case drizzled::DRIZZLE_TYPE_BLOB : 
00278     return DRIZZLE_TYPE_BLOB;
00279   case drizzled::DRIZZLE_TYPE_UUID : 
00280     return DRIZZLE_TYPE_UUID;
00281   case drizzled::DRIZZLE_TYPE_BOOLEAN : 
00282     return DRIZZLE_TYPE_BOOLEAN;
00283   case drizzled::DRIZZLE_TYPE_IPV6 : 
00284     return DRIZZLE_TYPE_IPV6;
00285   }
00286 
00287   assert(0);
00288   return PROGRAM_ERROR;
00289 }
00290 
00291 std::string hexdump(const unsigned char *str, size_t length)
00292 {
00293   static const char hexval[16] = { '0', '1', '2', '3', 
00294     '4', '5', '6', '7', 
00295     '8', '9', 'a', 'b', 
00296     'c', 'd', 'e', 'f' };
00297   unsigned max_cols = 16; 
00298   std::ostringstream buf;
00299   std::ostringstream raw_buf;
00300 
00301   const unsigned char *e= str + length;
00302   for (const unsigned char *i= str; i != e;)
00303   {
00304     raw_buf.str("");
00305     for (unsigned col = 0; col < max_cols; ++col)
00306     {
00307       if (i != e)
00308       {
00309         buf << hexval[ ( (*i >> 4) & 0xF ) ]
00310           << hexval[ ( *i & 0x0F ) ]
00311           << ' ';
00312         raw_buf << (isprint(*i) ? *i : '.');
00313         ++i;
00314       }
00315       else
00316       {
00317         buf << "   ";
00318       }
00319     }
00320   }
00321 
00322   return buf.str();
00323 }
00324 
00325 } /* namespace display */
00326 } /* namespace drizzled */