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_INIT_DB("COM_INIT_DB"); 
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 
00060 static const std::string FIELD_ITEM("FIELD_ITEM");
00061 static const std::string FUNC_ITEM("FUNC_ITEM");
00062 static const std::string SUM_FUNC_ITEM("SUM_FUNC_ITEM");
00063 static const std::string STRING_ITEM("STRING_ITEM");
00064 static const std::string INT_ITEM("INT_ITEM");
00065 static const std::string REAL_ITEM("REAL_ITEM");
00066 static const std::string NULL_ITEM("NULL_ITEM");
00067 static const std::string VARBIN_ITEM("VARBIN_ITEM");
00068 static const std::string COPY_STR_ITEM("COPY_STR_ITEM");
00069 static const std::string FIELD_AVG_ITEM("FIELD_AVG_ITEM");
00070 static const std::string DEFAULT_VALUE_ITEM("DEFAULT_VALUE_ITEM");
00071 static const std::string PROC_ITEM("PROC_ITEM");
00072 static const std::string COND_ITEM("COND_ITEM");
00073 static const std::string REF_ITEM("REF_ITEM");
00074 static const std::string FIELD_STD_ITEM("FIELD_STD_ITEM");
00075 static const std::string FIELD_VARIANCE_ITEM("FIELD_VARIANCE_ITEM");
00076 static const std::string INSERT_VALUE_ITEM("INSERT_VALUE_ITEM");
00077 static const std::string SUBSELECT_ITEM("SUBSELECT_ITEM");
00078 static const std::string ROW_ITEM("ROW_ITEM");
00079 static const std::string CACHE_ITEM("CACHE_ITEM");
00080 static const std::string TYPE_HOLDER("TYPE_HOLDER");
00081 static const std::string PARAM_ITEM("PARAM_ITEM");
00082 static const std::string BOOLEAN_ITEM("BOOLEAN_ITEM");
00083 static const std::string DECIMAL_ITEM("DECIMAL_ITEM");
00084 
00085 static const std::string ITEM_CAST_SIGNED("ITEM_CAST_SIGNED");
00086 static const std::string ITEM_CAST_UNSIGNED("ITEM_CAST_UNSIGNED");
00087 static const std::string ITEM_CAST_BINARY("ITEM_CAST_BINARY");
00088 static const std::string ITEM_CAST_BOOLEAN("ITEM_CAST_BOOLEAN");
00089 static const std::string ITEM_CAST_DATE("ITEM_CAST_DATE");
00090 static const std::string ITEM_CAST_TIME("ITEM_CAST_TIME");
00091 static const std::string ITEM_CAST_DATETIME("ITEM_CAST_DATETIME");
00092 static const std::string ITEM_CAST_CHAR("ITEM_CAST_CHAR");
00093 static const std::string ITEM_CAST_DECIMAL("ITEM_CAST_DECIMAL");
00094 
00095 static const std::string STRING_RESULT_STRING("STRING");
00096 static const std::string REAL_RESULT_STRING("REAL");
00097 static const std::string INT_RESULT_STRING("INTEGER");
00098 static const std::string ROW_RESULT_STRING("ROW");
00099 static const std::string DECIMAL_RESULT_STRING("DECIMAL");
00100 
00101 static const std::string YES("YES");
00102 static const std::string NO("NO");
00103 
00104 const std::string &type(drizzled::Cast_target type)
00105 {
00106   switch (type)
00107   {
00108   case drizzled::ITEM_CAST_SIGNED:
00109     return ITEM_CAST_SIGNED;
00110   case drizzled::ITEM_CAST_UNSIGNED:
00111     return ITEM_CAST_UNSIGNED;
00112   case drizzled::ITEM_CAST_BINARY:
00113     return ITEM_CAST_BINARY;
00114   case drizzled::ITEM_CAST_BOOLEAN:
00115     return ITEM_CAST_BOOLEAN;
00116   case drizzled::ITEM_CAST_DATE:
00117     return ITEM_CAST_DATE;
00118   case drizzled::ITEM_CAST_TIME:
00119     return ITEM_CAST_TIME;
00120   case drizzled::ITEM_CAST_DATETIME:
00121     return ITEM_CAST_DATETIME;
00122   case drizzled::ITEM_CAST_CHAR:
00123     return ITEM_CAST_CHAR;
00124   case drizzled::ITEM_CAST_DECIMAL:
00125     return ITEM_CAST_DECIMAL;
00126   }
00127 
00128   abort();
00129 }
00130 
00131 const std::string &type(drizzled::enum_server_command type)
00132 {
00133   switch (type)
00134   {
00135   case drizzled::COM_SLEEP : 
00136     return COM_SLEEP;
00137   case drizzled::COM_KILL : 
00138     {
00139       static std::string COM_KILL("COM_KILL");
00140       return COM_KILL;
00141     }
00142   case drizzled::COM_QUIT : 
00143     return COM_QUIT;
00144   case drizzled::COM_INIT_DB : 
00145     return COM_INIT_DB;
00146   case drizzled::COM_QUERY : 
00147     return COM_QUERY;
00148   case drizzled::COM_SHUTDOWN : 
00149     return COM_SHUTDOWN;
00150   case drizzled::COM_CONNECT : 
00151     return COM_CONNECT;
00152   case drizzled::COM_PING : 
00153     return COM_PING;
00154   case drizzled::COM_END : 
00155     return COM_END;
00156   }
00157 
00158   assert(0);
00159   return PROGRAM_ERROR;
00160 }
00161 
00162 const std::string &type(drizzled::Item::Type type)
00163 {
00164   switch (type)
00165   {
00166   case drizzled::Item::FIELD_ITEM :
00167     return FIELD_ITEM;
00168   case drizzled::Item::FUNC_ITEM :
00169     return FUNC_ITEM;
00170   case drizzled::Item::SUM_FUNC_ITEM :
00171     return SUM_FUNC_ITEM;
00172   case drizzled::Item::STRING_ITEM :
00173     return STRING_ITEM;
00174   case drizzled::Item::INT_ITEM :
00175     return INT_ITEM;
00176   case drizzled::Item::REAL_ITEM :
00177     return REAL_ITEM;
00178   case drizzled::Item::NULL_ITEM :
00179     return NULL_ITEM;
00180   case drizzled::Item::VARBIN_ITEM :
00181     return VARBIN_ITEM;
00182   case drizzled::Item::COPY_STR_ITEM :
00183     return COPY_STR_ITEM;
00184   case drizzled::Item::FIELD_AVG_ITEM :
00185     return FIELD_AVG_ITEM;
00186   case drizzled::Item::DEFAULT_VALUE_ITEM :
00187     return DEFAULT_VALUE_ITEM;
00188   case drizzled::Item::PROC_ITEM :
00189     return PROC_ITEM;
00190   case drizzled::Item::COND_ITEM :
00191     return COND_ITEM;
00192   case drizzled::Item::REF_ITEM :
00193     return REF_ITEM;
00194   case drizzled::Item::FIELD_STD_ITEM :
00195     return FIELD_STD_ITEM;
00196   case drizzled::Item::FIELD_VARIANCE_ITEM :
00197     return FIELD_VARIANCE_ITEM;
00198   case drizzled::Item::INSERT_VALUE_ITEM :
00199     return INSERT_VALUE_ITEM;
00200   case drizzled::Item::SUBSELECT_ITEM :
00201     return SUBSELECT_ITEM;
00202   case drizzled::Item::ROW_ITEM:
00203     return ROW_ITEM;
00204   case drizzled::Item::CACHE_ITEM :
00205     return CACHE_ITEM;
00206   case drizzled::Item::TYPE_HOLDER :
00207     return TYPE_HOLDER;
00208   case drizzled::Item::PARAM_ITEM :
00209     return PARAM_ITEM;
00210   case drizzled::Item::BOOLEAN_ITEM :
00211     return BOOLEAN_ITEM;
00212   case drizzled::Item::DECIMAL_ITEM :
00213     return DECIMAL_ITEM;
00214   }
00215 
00216   assert(0);
00217   return PROGRAM_ERROR;
00218 }
00219 
00220 const std::string &type(Item_result type)
00221 {
00222   switch (type)
00223   {
00224   case STRING_RESULT:
00225     return STRING_RESULT_STRING;
00226   case REAL_RESULT:
00227     return REAL_RESULT_STRING;
00228   case INT_RESULT:
00229     return INT_RESULT_STRING;
00230   case ROW_RESULT:
00231     return ROW_RESULT_STRING;
00232   case DECIMAL_RESULT:
00233     return DECIMAL_RESULT_STRING;
00234   }
00235 
00236   assert(0);
00237   return PROGRAM_ERROR;
00238 }
00239 
00240 const std::string &type(drizzled::enum_field_types type)
00241 {
00242   switch (type)
00243   {
00244   case drizzled::DRIZZLE_TYPE_LONG : 
00245     return DRIZZLE_TYPE_LONG;
00246   case drizzled::DRIZZLE_TYPE_DOUBLE : 
00247     return DRIZZLE_TYPE_DOUBLE;
00248   case drizzled::DRIZZLE_TYPE_NULL : 
00249     return DRIZZLE_TYPE_NULL;
00250   case drizzled::DRIZZLE_TYPE_MICROTIME : 
00251     return DRIZZLE_TYPE_MICROTIME;
00252   case drizzled::DRIZZLE_TYPE_TIMESTAMP : 
00253     return DRIZZLE_TYPE_TIMESTAMP;
00254   case drizzled::DRIZZLE_TYPE_LONGLONG : 
00255     return DRIZZLE_TYPE_LONGLONG;
00256   case drizzled::DRIZZLE_TYPE_DATETIME : 
00257     return DRIZZLE_TYPE_DATETIME;
00258   case drizzled::DRIZZLE_TYPE_TIME : 
00259     return DRIZZLE_TYPE_TIME;
00260   case drizzled::DRIZZLE_TYPE_DATE : 
00261     return DRIZZLE_TYPE_DATE;
00262   case drizzled::DRIZZLE_TYPE_VARCHAR : 
00263     return DRIZZLE_TYPE_VARCHAR;
00264   case drizzled::DRIZZLE_TYPE_DECIMAL : 
00265     return DRIZZLE_TYPE_DECIMAL;
00266   case drizzled::DRIZZLE_TYPE_ENUM : 
00267     return DRIZZLE_TYPE_ENUM;
00268   case drizzled::DRIZZLE_TYPE_BLOB : 
00269     return DRIZZLE_TYPE_BLOB;
00270   case drizzled::DRIZZLE_TYPE_UUID : 
00271     return DRIZZLE_TYPE_UUID;
00272   case drizzled::DRIZZLE_TYPE_BOOLEAN : 
00273     return DRIZZLE_TYPE_BOOLEAN;
00274   }
00275 
00276   assert(0);
00277   return PROGRAM_ERROR;
00278 }
00279 
00280 std::string hexdump(const unsigned char *str, size_t length)
00281 {
00282   static const char hexval[16] = { '0', '1', '2', '3', 
00283     '4', '5', '6', '7', 
00284     '8', '9', 'a', 'b', 
00285     'c', 'd', 'e', 'f' };
00286   unsigned max_cols = 16; 
00287   std::ostringstream buf;
00288   std::ostringstream raw_buf;
00289 
00290   const unsigned char *e= str + length;
00291   for (const unsigned char *i= str; i != e;)
00292   {
00293     raw_buf.str("");
00294     for (unsigned col = 0; col < max_cols; ++col)
00295     {
00296       if (i != e)
00297       {
00298         buf << hexval[ ( (*i >> 4) & 0xF ) ]
00299           << hexval[ ( *i & 0x0F ) ]
00300           << ' ';
00301         raw_buf << (isprint(*i) ? *i : '.');
00302         ++i;
00303       }
00304       else
00305       {
00306         buf << "   ";
00307       }
00308     }
00309   }
00310 
00311   return buf.str();
00312 }
00313 
00314 } /* namespace display */
00315 } /* namespace drizzled */