diff options
Diffstat (limited to 'isam/_dbug.c')
-rw-r--r-- | isam/_dbug.c | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/isam/_dbug.c b/isam/_dbug.c new file mode 100644 index 00000000000..644d0e420d6 --- /dev/null +++ b/isam/_dbug.c @@ -0,0 +1,132 @@ +/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB + + 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; either version 2 of the License, or + (at your option) any later version. + + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* Support rutiner with are using with dbug */ + +#include "isamdef.h" + + /* Print a key in user understandable format */ + +void _nisam_print_key(FILE *stream, register N_KEYSEG *keyseg, const uchar *key) +{ + int flag; + short int s_1; + long int l_1; + float f_1; + double d_1; + uchar *end; + + VOID(fputs("Key: \"",stream)); + flag=0; + for (; keyseg->base.type ;keyseg++) + { + if (flag++) + VOID(putc('-',stream)); + end= (uchar*) key+ keyseg->base.length; + switch (keyseg->base.type) { + case HA_KEYTYPE_BINARY: + if (!(keyseg->base.flag & HA_SPACE_PACK) && keyseg->base.length == 1) + { /* packed binary digit */ + VOID(fprintf(stream,"%d",(uint) *key++)); + break; + } + /* fall through */ + case HA_KEYTYPE_TEXT: + case HA_KEYTYPE_NUM: + if (keyseg->base.flag & HA_SPACE_PACK) + { + VOID(fprintf(stream,"%.*s",(int) *key,key+1)); + key+= (int) *key+1; + } + else + { + VOID(fprintf(stream,"%.*s",(int) keyseg->base.length,key)); + key=end; + } + break; + case HA_KEYTYPE_INT8: + VOID(fprintf(stream,"%d",(int) *((signed char*) key))); + key=end; + break; + case HA_KEYTYPE_SHORT_INT: + shortget(s_1,key); + VOID(fprintf(stream,"%d",(int) s_1)); + key=end; + break; + case HA_KEYTYPE_USHORT_INT: + { + ushort u_1; + ushortget(u_1,key); + VOID(fprintf(stream,"%u",(uint) u_1)); + key=end; + break; + } + case HA_KEYTYPE_LONG_INT: + longget(l_1,key); + VOID(fprintf(stream,"%ld",l_1)); + key=end; + break; + case HA_KEYTYPE_ULONG_INT: + longget(l_1,key); + VOID(fprintf(stream,"%lu",(ulong) l_1)); + key=end; + break; + case HA_KEYTYPE_INT24: + VOID(fprintf(stream,"%d",sint3korr(key))); + key=end; + break; + case HA_KEYTYPE_UINT24: + VOID(fprintf(stream,"%ld",uint3korr(key))); + key=end; + break; + case HA_KEYTYPE_FLOAT: + bmove((byte*) &f_1,(byte*) key,(int) sizeof(float)); + VOID(fprintf(stream,"%g",(double) f_1)); + key=end; + break; + case HA_KEYTYPE_DOUBLE: + doubleget(d_1,key); + VOID(fprintf(stream,"%g",d_1)); + key=end; + break; +#ifdef HAVE_LONG_LONG + case HA_KEYTYPE_LONGLONG: + { + char buff[21]; + longlong tmp; + longlongget(tmp,key); + longlong2str(tmp,buff,-10); + VOID(fprintf(stream,"%s",buff)); + key=end; + break; + } + case HA_KEYTYPE_ULONGLONG: + { + char buff[21]; + longlong tmp; + longlongget(tmp,key); + longlong2str(tmp,buff,10); + VOID(fprintf(stream,"%s",buff)); + key=end; + break; + } +#endif + default: break; /* This never happens */ + } + } + VOID(fputs("\n",stream)); + return; +} /* print_key */ |