modernc.org/cc@v1.0.1/v2/testdata/_sqlite/ext/lsm1/lsm-test/lsmtest_func.c (about)

     1  
     2  #include "lsmtest.h"
     3  
     4  
     5  int do_work(int nArg, char **azArg){
     6    struct Option {
     7      const char *zName;
     8    } aOpt [] = {
     9      { "-nmerge" },
    10      { "-nkb" },
    11      { 0 }
    12    };
    13  
    14    lsm_db *pDb;
    15    int rc;
    16    int i;
    17    const char *zDb;
    18    int nMerge = 1;
    19    int nKB = (1<<30);
    20  
    21    if( nArg==0 ) goto usage;
    22    zDb = azArg[nArg-1];
    23    for(i=0; i<(nArg-1); i++){
    24      int iSel;
    25      rc = testArgSelect(aOpt, "option", azArg[i], &iSel);
    26      if( rc ) return rc;
    27      switch( iSel ){
    28        case 0:
    29          i++;
    30          if( i==(nArg-1) ) goto usage;
    31          nMerge = atoi(azArg[i]);
    32          break;
    33        case 1:
    34          i++;
    35          if( i==(nArg-1) ) goto usage;
    36          nKB = atoi(azArg[i]);
    37          break;
    38      }
    39    }
    40  
    41    rc = lsm_new(0, &pDb);
    42    if( rc!=LSM_OK ){
    43      testPrintError("lsm_open(): rc=%d\n", rc);
    44    }else{
    45      rc = lsm_open(pDb, zDb);
    46      if( rc!=LSM_OK ){
    47        testPrintError("lsm_open(): rc=%d\n", rc);
    48      }else{
    49        int n = -1;
    50        lsm_config(pDb, LSM_CONFIG_BLOCK_SIZE, &n);
    51        n = n*2;
    52        lsm_config(pDb, LSM_CONFIG_AUTOCHECKPOINT, &n);
    53  
    54        rc = lsm_work(pDb, nMerge, nKB, 0);
    55        if( rc!=LSM_OK ){
    56          testPrintError("lsm_work(): rc=%d\n", rc);
    57        }
    58      }
    59    }
    60    if( rc==LSM_OK ){
    61      rc = lsm_checkpoint(pDb, 0);
    62    }
    63  
    64    lsm_close(pDb);
    65    return rc;
    66  
    67   usage:
    68    testPrintUsage("?-optimize? ?-n N? DATABASE");
    69    return -1;
    70  }
    71  
    72  
    73  /*
    74  **   lsmtest show ?-config LSM-CONFIG? DATABASE ?COMMAND ?PGNO??
    75  */
    76  int do_show(int nArg, char **azArg){
    77    lsm_db *pDb;
    78    int rc;
    79    const char *zDb;
    80  
    81    int eOpt = LSM_INFO_DB_STRUCTURE;
    82    unsigned int iPg = 0;
    83    int bConfig = 0;
    84    const char *zConfig = "";
    85  
    86    struct Option {
    87      const char *zName;
    88      int bConfig;
    89      int eOpt;
    90    } aOpt [] = { 
    91      { "array",       0, LSM_INFO_ARRAY_STRUCTURE },
    92      { "array-pages", 0, LSM_INFO_ARRAY_PAGES },
    93      { "blocksize",   1, LSM_CONFIG_BLOCK_SIZE },
    94      { "pagesize",    1, LSM_CONFIG_PAGE_SIZE },
    95      { "freelist",    0, LSM_INFO_FREELIST },
    96      { "page-ascii",  0, LSM_INFO_PAGE_ASCII_DUMP },
    97      { "page-hex",    0, LSM_INFO_PAGE_HEX_DUMP },
    98      { 0, 0 } 
    99    };
   100  
   101    char *z = 0; 
   102    int iDb = 0;                    /* Index of DATABASE in azArg[] */
   103  
   104    /* Check if there is a "-config" option: */
   105    if( nArg>2 && strlen(azArg[0])>1 
   106     && memcmp(azArg[0], "-config", strlen(azArg[0]))==0
   107    ){
   108      zConfig = azArg[1];
   109      iDb = 2;
   110    }
   111    if( nArg<(iDb+1) ) goto usage;
   112  
   113    if( nArg>(iDb+1) ){
   114      rc = testArgSelect(aOpt, "option", azArg[iDb+1], &eOpt);
   115      if( rc!=0 ) return rc;
   116      bConfig = aOpt[eOpt].bConfig;
   117      eOpt = aOpt[eOpt].eOpt;
   118      if( (bConfig==0 && eOpt==LSM_INFO_FREELIST)
   119       || (bConfig==1 && eOpt==LSM_CONFIG_BLOCK_SIZE)
   120       || (bConfig==1 && eOpt==LSM_CONFIG_PAGE_SIZE)
   121      ){
   122        if( nArg!=(iDb+2) ) goto usage;
   123      }else{
   124        if( nArg!=(iDb+3) ) goto usage;
   125        iPg = atoi(azArg[iDb+2]);
   126      }
   127    }
   128    zDb = azArg[iDb];
   129  
   130    rc = lsm_new(0, &pDb);
   131    tdb_lsm_configure(pDb, zConfig);
   132    if( rc!=LSM_OK ){
   133      testPrintError("lsm_new(): rc=%d\n", rc);
   134    }else{
   135      rc = lsm_open(pDb, zDb);
   136      if( rc!=LSM_OK ){
   137        testPrintError("lsm_open(): rc=%d\n", rc);
   138      }
   139    }
   140  
   141    if( rc==LSM_OK ){
   142      if( bConfig==0 ){
   143        switch( eOpt ){
   144          case LSM_INFO_DB_STRUCTURE:
   145          case LSM_INFO_FREELIST:
   146            rc = lsm_info(pDb, eOpt, &z);
   147            break;
   148          case LSM_INFO_ARRAY_STRUCTURE:
   149          case LSM_INFO_ARRAY_PAGES:
   150          case LSM_INFO_PAGE_ASCII_DUMP:
   151          case LSM_INFO_PAGE_HEX_DUMP:
   152            rc = lsm_info(pDb, eOpt, iPg, &z);
   153            break;
   154          default:
   155            assert( !"no chance" );
   156        }
   157  
   158        if( rc==LSM_OK ){
   159          printf("%s\n", z ? z : "");
   160          fflush(stdout);
   161        }
   162        lsm_free(lsm_get_env(pDb), z);
   163      }else{
   164        int iRes = -1;
   165        lsm_config(pDb, eOpt, &iRes);
   166        printf("%d\n", iRes);
   167        fflush(stdout);
   168      }
   169    }
   170  
   171    lsm_close(pDb);
   172    return rc;
   173  
   174   usage:
   175    testPrintUsage("DATABASE ?array|page-ascii|page-hex PGNO?");
   176    return -1;
   177  }