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

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