mi_dbug.c
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
  2.    
  3.    This program is free software; you can redistribute it and/or modify
  4.    it under the terms of the GNU General Public License as published by
  5.    the Free Software Foundation; either version 2 of the License, or
  6.    (at your option) any later version.
  7.    
  8.    This program is distributed in the hope that it will be useful,
  9.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11.    GNU General Public License for more details.
  12.    
  13.    You should have received a copy of the GNU General Public License
  14.    along with this program; if not, write to the Free Software
  15.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  16. /* Support rutiner with are using with dbug */
  17. #include "myisamdef.h"
  18. /* Print a key in user understandable format */
  19. void _mi_print_key(FILE *stream, register MI_KEYSEG *keyseg,
  20.    const uchar *key, uint length)
  21. {
  22.   int flag;
  23.   short int s_1;
  24.   long int l_1;
  25.   float f_1;
  26.   double d_1;
  27.   const uchar *end;
  28.   const uchar *key_end=key+length;
  29.   VOID(fputs("Key: "",stream));
  30.   flag=0;
  31.   for (; keyseg->type && key < key_end ;keyseg++)
  32.   {
  33.     if (flag++)
  34.       VOID(putc('-',stream));
  35.     end= key+ keyseg->length;
  36.     if (keyseg->flag & HA_NULL_PART)
  37.     {
  38.       if (!*key)
  39.       {
  40. fprintf(stream,"NULL");
  41. continue;
  42.       }
  43.       key++;
  44.     }
  45.     switch (keyseg->type) {
  46.     case HA_KEYTYPE_BINARY:
  47.       if (!(keyseg->flag & HA_SPACE_PACK) && keyseg->length == 1)
  48.       { /* packed binary digit */
  49. VOID(fprintf(stream,"%d",(uint) *key++));
  50. break;
  51.       }
  52.       /* fall through */
  53.     case HA_KEYTYPE_TEXT:
  54.     case HA_KEYTYPE_NUM:
  55.       if (keyseg->flag & HA_SPACE_PACK)
  56.       {
  57. VOID(fprintf(stream,"%.*s",(int) *key,key+1));
  58. key+= (int) *key+1;
  59.       }
  60.       else
  61.       {
  62. VOID(fprintf(stream,"%.*s",(int) keyseg->length,key));
  63. key=end;
  64.       }
  65.       break;
  66.     case HA_KEYTYPE_INT8:
  67.       VOID(fprintf(stream,"%d",(int) *((signed char*) key)));
  68.       key=end;
  69.       break;
  70.     case HA_KEYTYPE_SHORT_INT:
  71.       s_1= mi_sint2korr(key);
  72.       VOID(fprintf(stream,"%d",(int) s_1));
  73.       key=end;
  74.       break;
  75.     case HA_KEYTYPE_USHORT_INT:
  76.       {
  77. ushort u_1;
  78. u_1= mi_uint2korr(key);
  79. VOID(fprintf(stream,"%u",(uint) u_1));
  80. key=end;
  81. break;
  82.       }
  83.     case HA_KEYTYPE_LONG_INT:
  84.       l_1=mi_sint4korr(key);
  85.       VOID(fprintf(stream,"%ld",l_1));
  86.       key=end;
  87.       break;
  88.     case HA_KEYTYPE_ULONG_INT:
  89.       l_1=mi_sint4korr(key);
  90.       VOID(fprintf(stream,"%lu",(ulong) l_1));
  91.       key=end;
  92.       break;
  93.     case HA_KEYTYPE_INT24:
  94.       VOID(fprintf(stream,"%ld",(long) mi_sint3korr(key)));
  95.       key=end;
  96.       break;
  97.     case HA_KEYTYPE_UINT24:
  98.       VOID(fprintf(stream,"%lu",(ulong) mi_uint3korr(key)));
  99.       key=end;
  100.       break;
  101.     case HA_KEYTYPE_FLOAT:
  102.       mi_float4get(f_1,key);
  103.       VOID(fprintf(stream,"%g",(double) f_1));
  104.       key=end;
  105.       break;
  106.     case HA_KEYTYPE_DOUBLE:
  107.       mi_float8get(d_1,key);
  108.       VOID(fprintf(stream,"%g",d_1));
  109.       key=end;
  110.       break;
  111. #ifdef HAVE_LONG_LONG
  112.     case HA_KEYTYPE_LONGLONG:
  113.     {
  114.       char buff[21];
  115.       longlong2str(mi_sint8korr(key),buff,-10);
  116.       VOID(fprintf(stream,"%s",buff));
  117.       key=end;
  118.       break;
  119.     }
  120.     case HA_KEYTYPE_ULONGLONG:
  121.     {
  122.       char buff[21];
  123.       longlong2str(mi_sint8korr(key),buff,10);
  124.       VOID(fprintf(stream,"%s",buff));
  125.       key=end;
  126.       break;
  127.     }
  128. #endif
  129.     case HA_KEYTYPE_VARTEXT: /* VARCHAR and TEXT */
  130.     case HA_KEYTYPE_VARBINARY: /* VARBINARY and BLOB */
  131.     {
  132.       uint tmp_length;
  133.       get_key_length(tmp_length,key);
  134.       VOID(fprintf(stream,"%.*s",(int) tmp_length,key));
  135.       key+=tmp_length;
  136.       break;
  137.     }
  138.     default: break; /* This never happens */
  139.     }
  140.   }
  141.   VOID(fputs(""n",stream));
  142.   return;
  143. } /* print_key */
  144. #ifdef EXTRA_DEBUG 
  145. my_bool check_table_is_closed(const char *name, const char *where)
  146. {
  147.   char filename[FN_REFLEN];
  148.   LIST *pos;
  149.   DBUG_ENTER("check_table_is_closed");
  150.   (void) fn_format(filename,name,"",MI_NAME_IEXT,4+16+32);
  151.   for (pos=myisam_open_list ; pos ; pos=pos->next)
  152.   {
  153.     MI_INFO *info=(MI_INFO*) pos->data;
  154.     MYISAM_SHARE *share=info->s;
  155.     if (!strcmp(share->filename,filename))
  156.     {
  157.       if (share->last_version)
  158.       {
  159. fprintf(stderr,"Warning:  Table: %s is open on %sn", name,where);
  160. DBUG_PRINT("warning",("Table: %s is open on %s", name,where));
  161. DBUG_RETURN(1);
  162.       }
  163.     }
  164.   }
  165.   DBUG_RETURN(0);
  166. }
  167. #endif /* EXTRA_DEBUG */