mi_dbug.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

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