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. #include "isamdef.h"
  17. static void get_options(int argc, char *argv[]);
  18. static int rec_pointer_size=0,verbose=0,remove_ant=0,pack_keys=1,flags[50],
  19.   packed_field=FIELD_SKIPP_PRESPACE;
  20. int main(argc,argv)
  21. int argc;
  22. char *argv[];
  23. {
  24.   N_INFO *file;
  25.   int i,j,error,deleted,found;
  26.   char record[128],key[32],*filename,read_record[128];
  27.   N_KEYDEF keyinfo[10];
  28.   N_RECINFO recinfo[10];
  29.   MY_INIT(argv[0]);
  30.   filename= (char*) "test1";
  31.   my_init();
  32.   get_options(argc,argv);
  33.   keyinfo[0].seg[0].base.type=HA_KEYTYPE_NUM;
  34.   keyinfo[0].seg[0].base.flag=(uint8) (pack_keys ?
  35.        HA_PACK_KEY | HA_SPACE_PACK : 0);
  36.   keyinfo[0].seg[0].base.start=0;
  37.   keyinfo[0].seg[0].base.length=6;
  38.   keyinfo[0].seg[1].base.type=HA_KEYTYPE_END;
  39.   keyinfo[0].base.flag = (uint8) (pack_keys ?
  40.   HA_NOSAME | HA_PACK_KEY : HA_NOSAME);
  41.   recinfo[0].base.type=packed_field; recinfo[0].base.length=6;
  42.   recinfo[1].base.type=FIELD_NORMAL; recinfo[1].base.length=24;
  43.   recinfo[2].base.type=FIELD_LAST;
  44.   deleted=0;
  45.   bzero((byte*) flags,sizeof(flags));
  46.   printf("- Creating isam-filen");
  47.   if (nisam_create(filename,1,keyinfo,recinfo,
  48. (ulong) (rec_pointer_size ? (1L << (rec_pointer_size*8))/40 :
  49.  0),10l,0,0,0L))
  50.     goto err;
  51.   if (!(file=nisam_open(filename,2,HA_OPEN_ABORT_IF_LOCKED)))
  52.     goto err;
  53.   printf("- Writing key:sn");
  54.   strmov(record,"      ..... key"); strappend(record,30,' ');
  55.   my_errno=0;
  56.   for (i=49 ; i>=1 ; i-=2 )
  57.   {
  58.     j=i%25 +1;
  59.     sprintf(key,"%6d",j);
  60.     bmove(record,key,6);
  61.     error=nisam_write(file,record);
  62.     flags[j]=1;
  63.     if (verbose || error)
  64.       printf("J= %2d  nisam_write: %d  errno: %dn", j,error,my_errno);
  65.   }
  66.   if (nisam_close(file)) goto err;
  67.   printf("- Reopening filen");
  68.   if (!(file=nisam_open(filename,2,HA_OPEN_ABORT_IF_LOCKED))) goto err;
  69.   printf("- Removing keysn");
  70.   for (i=1 ; i<=10 ; i++)
  71.   {
  72.     if (i == remove_ant) { VOID(nisam_close(file)) ; exit(0) ; }
  73.     sprintf(key,"%6d",(j=(int) ((rand() & 32767)/32767.*25)));
  74.     my_errno=0;
  75.     if ((error = nisam_rkey(file,read_record,0,key,0,HA_READ_KEY_EXACT)))
  76.     {
  77.       if (verbose || (flags[j] == 1 ||
  78.       (error && my_errno != HA_ERR_KEY_NOT_FOUND)))
  79. printf("key: %s  nisam_rkey:   %3d  errno: %3dn",key,error,my_errno);
  80.     }
  81.     else
  82.     {
  83.       error=nisam_delete(file,read_record);
  84.       if (verbose || error)
  85. printf("key: %s  nisam_delete: %3d  errno: %3dn",key,error,my_errno);
  86.       flags[j]=0;
  87.       if (! error)
  88. deleted++;
  89.     }
  90.   }
  91.   printf("- Reading records with keyn");
  92.   for (i=1 ; i<=25 ; i++)
  93.   {
  94.     sprintf(key,"%6d",i);
  95.     bmove(record,key,6);
  96.     my_errno=0;
  97.     error=nisam_rkey(file,read_record,0,key,0,HA_READ_KEY_EXACT);
  98.     if (verbose ||
  99. (error == 0 && flags[i] != 1) ||
  100. (error && (flags[i] != 0 || my_errno != HA_ERR_KEY_NOT_FOUND)))
  101.     {
  102.       printf("key: %s  nisam_rkey: %3d  errno: %3d  record: %sn",
  103.       key,error,my_errno,record+1);
  104.     }
  105.   }
  106.   printf("- Reading records with positionn");
  107.   for (i=1,found=0 ; i <= 30 ; i++)
  108.   {
  109.     my_errno=0;
  110.     if ((error=nisam_rrnd(file,read_record,i == 1 ? 0L : NI_POS_ERROR)) == -1)
  111.     {
  112.       if (found != 25-deleted)
  113. printf("Found only %d of %d recordsn",found,25-deleted);
  114.       break;
  115.     }
  116.     if (!error)
  117.       found++;
  118.     if (verbose || (error != 0 && error != 1))
  119.     {
  120.       printf("pos: %2d  nisam_rrnd: %3d  errno: %3d  record: %sn",
  121.      i-1,error,my_errno,read_record+1);
  122.     }
  123.   }
  124.   if (nisam_close(file)) goto err;
  125.   my_end(MY_CHECK_ERROR);
  126.   exit(0);
  127. err:
  128.   printf("got error: %3d when using nisam-databasen",my_errno);
  129.   exit(1);
  130.   return 0; /* skipp warning */
  131. } /* main */
  132. /* l{ser optioner */
  133. /* OBS! intierar endast DEBUG - ingen debuggning h{r ! */
  134. static void get_options(argc,argv)
  135. int argc;
  136. char *argv[];
  137. {
  138.   char *pos;
  139.   while (--argc >0 && *(pos = *(++argv)) == '-' ) {
  140.     switch(*++pos) {
  141.     case 'R': /* Length of record pointer */
  142.       rec_pointer_size=atoi(++pos);
  143.       if (rec_pointer_size > 3)
  144. rec_pointer_size=0;
  145.       break;
  146.     case 'P':
  147.       pack_keys=0; /* Don't use packed key */
  148.       break;
  149.     case 'S':
  150.       packed_field=FIELD_NORMAL; /* static-size record*/
  151.       break;
  152.     case 'v': /* verbose */
  153.       verbose=1;
  154.       break;
  155.     case 'm':
  156.       remove_ant=atoi(++pos);
  157.       break;
  158.     case 'V':
  159.       printf("isamtest1  Ver 1.0 n");
  160.       exit(0);
  161.     case '#':
  162.       DEBUGGER_ON;
  163.       DBUG_PUSH (++pos);
  164.       break;
  165.     }
  166.   }
  167.   return;
  168. } /* get options */