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_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 }
00315 }