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