hp_test1.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. /* Test av heap-database */
  14. /* Programmet skapar en heap-databas. Till denna skrivs ett antal poster.
  15.    Databasen st{ngs. D{refter |ppnas den p} nytt och en del av posterna
  16.    raderas.
  17. */
  18. #include <my_global.h>
  19. #include <my_sys.h>
  20. #include <m_string.h>
  21. #include "heap.h"
  22. static int get_options(int argc, char *argv[]);
  23. static int flag=0,verbose=0,remove_ant=0,flags[50];
  24. int main(int argc, char **argv)
  25. {
  26.   int i,j,error,deleted;
  27.   HP_INFO *file;
  28.   char record[128],key[32];
  29.   const char *filename;
  30.   HP_KEYDEF keyinfo[10];
  31.   HA_KEYSEG keyseg[4];
  32.   HP_CREATE_INFO hp_create_info;
  33.   MY_INIT(argv[0]);
  34.   filename= "test1";
  35.   get_options(argc,argv);
  36.   bzero(&hp_create_info, sizeof(hp_create_info));
  37.   keyinfo[0].keysegs=1;
  38.   keyinfo[0].seg=keyseg;
  39.   keyinfo[0].algorithm= HA_KEY_ALG_HASH;
  40.   keyinfo[0].seg[0].type=HA_KEYTYPE_BINARY;
  41.   keyinfo[0].seg[0].start=1;
  42.   keyinfo[0].seg[0].length=6;
  43.   keyinfo[0].seg[0].charset= &my_charset_latin1;
  44.   keyinfo[0].flag = HA_NOSAME;
  45.   
  46.   deleted=0;
  47.   bzero((gptr) flags,sizeof(flags));
  48.   printf("- Creating heap-filen");
  49.   if (heap_create(filename,1,keyinfo,30,(ulong) flag*100000l,10l,
  50.   &hp_create_info) ||
  51.       !(file= heap_open(filename, 2)))
  52.     goto err;
  53.   printf("- Writing records:sn");
  54.   strmov(record,"          ..... key           ");
  55.   for (i=49 ; i>=1 ; i-=2 )
  56.   {
  57.     j=i%25 +1;
  58.     sprintf(key,"%6d",j);
  59.     bmove(record+1,key,6);
  60.     error=heap_write(file,record);
  61.     if (heap_check_heap(file,0))
  62.     {
  63.       puts("Heap keys crashed");
  64.       goto err;
  65.     }
  66.     flags[j]=1;
  67.     if (verbose || error) printf("J= %2d  heap_write: %d  my_errno: %dn",
  68.        j,error,my_errno);
  69.   }
  70.   if (heap_close(file))
  71.     goto err;
  72.   printf("- Reopening filen");
  73.   if (!(file=heap_open(filename, 2)))
  74.     goto err;
  75.   printf("- Removing recordsn");
  76.   for (i=1 ; i<=10 ; i++)
  77.   {
  78.     if (i == remove_ant) { VOID(heap_close(file)) ; return (0) ; }
  79.     sprintf(key,"%6d",(j=(int) ((rand() & 32767)/32767.*25)));
  80.     if ((error = heap_rkey(file,record,0,key,6,HA_READ_KEY_EXACT)))
  81.     {
  82.       if (verbose || (flags[j] == 1 ||
  83.       (error && my_errno != HA_ERR_KEY_NOT_FOUND)))
  84. printf("key: %s  rkey:   %3d  my_errno: %3dn",key,error,my_errno);
  85.     }
  86.     else
  87.     {
  88.       error=heap_delete(file,record);
  89.       if (error || verbose)
  90. printf("key: %s  delete: %d  my_errno: %dn",key,error,my_errno);
  91.       flags[j]=0;
  92.       if (! error)
  93. deleted++;
  94.     }
  95.     if (heap_check_heap(file,0))
  96.     {
  97.       puts("Heap keys crashed");
  98.       goto err;
  99.     }
  100.   }
  101.   printf("- Reading records with keyn");
  102.   for (i=1 ; i<=25 ; i++)
  103.   {
  104.     sprintf(key,"%6d",i);
  105.     bmove(record+1,key,6);
  106.     my_errno=0;
  107.     error=heap_rkey(file,record,0,key,6,HA_READ_KEY_EXACT);
  108.     if (verbose ||
  109. (error == 0 && flags[i] != 1) ||
  110. (error && (flags[i] != 0 || my_errno != HA_ERR_KEY_NOT_FOUND)))
  111.     {
  112.       printf("key: %s  rkey: %3d  my_errno: %3d  record: %sn",
  113.       key,error,my_errno,record+1);
  114.     }
  115.   }
  116. #ifdef OLD_HEAP_VERSION
  117.   {
  118.     int found;
  119.     printf("- Reading records with positionn");
  120.     for (i=1,found=0 ; i <= 30 ; i++)
  121.     {
  122.       my_errno=0;
  123.       if ((error=heap_rrnd(file,record,i == 1 ? 0L : (ulong) -1)) ==
  124.   HA_ERR_END_OF_FILE)
  125.       {
  126. if (found != 25-deleted)
  127.   printf("Found only %d of %d recordsn",found,25-deleted);
  128. break;
  129.       }
  130.       if (!error)
  131. found++;
  132.       if (verbose || (error != 0 && error != HA_ERR_RECORD_DELETED))
  133.       {
  134. printf("pos: %2d  ni_rrnd: %3d  my_errno: %3d  record: %sn",
  135.        i-1,error,my_errno,record+1);
  136.       }
  137.     }
  138.   }
  139. #endif
  140.   if (heap_close(file) || heap_panic(HA_PANIC_CLOSE))
  141.     goto err;
  142.   my_end(MY_GIVE_INFO);
  143.   return(0);
  144. err:
  145.   printf("got error: %d when using heap-databasen",my_errno);
  146.   return(1);
  147. } /* main */
  148. /* Read options */
  149. static int get_options(int argc, char **argv)
  150. {
  151.   char *pos;
  152.   while (--argc >0 && *(pos = *(++argv)) == '-' ) {
  153.     switch(*++pos) {
  154.     case 'B': /* Big file */
  155.       flag=1;
  156.       break;
  157.     case 'v': /* verbose */
  158.       verbose=1;
  159.       break;
  160.     case 'm':
  161.       remove_ant=atoi(++pos);
  162.       break;
  163.     case 'V':
  164.       printf("hp_test1    Ver 3.0 n");
  165.       exit(0);
  166.     case '#':
  167.       DBUG_PUSH (++pos);
  168.       break;
  169.     }
  170.   }
  171.   return 0;
  172. } /* get options */