00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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 }
00326 }