/ Hex Artifact Content
Login

Artifact 159aa401bc8032bfa3d8cf2977bd687abebab880255895a5eb45770d626fa38d:


0000: 0a 23 69 6e 63 6c 75 64 65 20 22 6c 73 6d 74 65  .#include "lsmte
0010: 73 74 2e 68 22 0a 0a 0a 69 6e 74 20 64 6f 5f 77  st.h"...int do_w
0020: 6f 72 6b 28 69 6e 74 20 6e 41 72 67 2c 20 63 68  ork(int nArg, ch
0030: 61 72 20 2a 2a 61 7a 41 72 67 29 7b 0a 20 20 73  ar **azArg){.  s
0040: 74 72 75 63 74 20 4f 70 74 69 6f 6e 20 7b 0a 20  truct Option {. 
0050: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
0060: 4e 61 6d 65 3b 0a 20 20 7d 20 61 4f 70 74 20 5b  Name;.  } aOpt [
0070: 5d 20 3d 20 7b 0a 20 20 20 20 7b 20 22 2d 6e 6d  ] = {.    { "-nm
0080: 65 72 67 65 22 20 7d 2c 0a 20 20 20 20 7b 20 22  erge" },.    { "
0090: 2d 6e 6b 62 22 20 7d 2c 0a 20 20 20 20 7b 20 30  -nkb" },.    { 0
00a0: 20 7d 0a 20 20 7d 3b 0a 0a 20 20 6c 73 6d 5f 64   }.  };..  lsm_d
00b0: 62 20 2a 70 44 62 3b 0a 20 20 69 6e 74 20 72 63  b *pDb;.  int rc
00c0: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 6f 6e  ;.  int i;.  con
00d0: 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20  st char *zDb;.  
00e0: 69 6e 74 20 6e 4d 65 72 67 65 20 3d 20 31 3b 0a  int nMerge = 1;.
00f0: 20 20 69 6e 74 20 6e 4b 42 20 3d 20 28 31 3c 3c    int nKB = (1<<
0100: 33 30 29 3b 0a 0a 20 20 69 66 28 20 6e 41 72 67  30);..  if( nArg
0110: 3d 3d 30 20 29 20 67 6f 74 6f 20 75 73 61 67 65  ==0 ) goto usage
0120: 3b 0a 20 20 7a 44 62 20 3d 20 61 7a 41 72 67 5b  ;.  zDb = azArg[
0130: 6e 41 72 67 2d 31 5d 3b 0a 20 20 66 6f 72 28 69  nArg-1];.  for(i
0140: 3d 30 3b 20 69 3c 28 6e 41 72 67 2d 31 29 3b 20  =0; i<(nArg-1); 
0150: 69 2b 2b 29 7b 0a 20 20 20 20 69 6e 74 20 69 53  i++){.    int iS
0160: 65 6c 3b 0a 20 20 20 20 72 63 20 3d 20 74 65 73  el;.    rc = tes
0170: 74 41 72 67 53 65 6c 65 63 74 28 61 4f 70 74 2c  tArgSelect(aOpt,
0180: 20 22 6f 70 74 69 6f 6e 22 2c 20 61 7a 41 72 67   "option", azArg
0190: 5b 69 5d 2c 20 26 69 53 65 6c 29 3b 0a 20 20 20  [i], &iSel);.   
01a0: 20 69 66 28 20 72 63 20 29 20 72 65 74 75 72 6e   if( rc ) return
01b0: 20 72 63 3b 0a 20 20 20 20 73 77 69 74 63 68 28   rc;.    switch(
01c0: 20 69 53 65 6c 20 29 7b 0a 20 20 20 20 20 20 63   iSel ){.      c
01d0: 61 73 65 20 30 3a 0a 20 20 20 20 20 20 20 20 69  ase 0:.        i
01e0: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ++;.        if( 
01f0: 69 3d 3d 28 6e 41 72 67 2d 31 29 20 29 20 67 6f  i==(nArg-1) ) go
0200: 74 6f 20 75 73 61 67 65 3b 0a 20 20 20 20 20 20  to usage;.      
0210: 20 20 6e 4d 65 72 67 65 20 3d 20 61 74 6f 69 28    nMerge = atoi(
0220: 61 7a 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20  azArg[i]);.     
0230: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
0240: 63 61 73 65 20 31 3a 0a 20 20 20 20 20 20 20 20  case 1:.        
0250: 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 69 66 28  i++;.        if(
0260: 20 69 3d 3d 28 6e 41 72 67 2d 31 29 20 29 20 67   i==(nArg-1) ) g
0270: 6f 74 6f 20 75 73 61 67 65 3b 0a 20 20 20 20 20  oto usage;.     
0280: 20 20 20 6e 4b 42 20 3d 20 61 74 6f 69 28 61 7a     nKB = atoi(az
0290: 41 72 67 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  Arg[i]);.       
02a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
02b0: 7d 0a 0a 20 20 72 63 20 3d 20 6c 73 6d 5f 6e 65  }..  rc = lsm_ne
02c0: 77 28 30 2c 20 26 70 44 62 29 3b 0a 20 20 69 66  w(0, &pDb);.  if
02d0: 28 20 72 63 21 3d 4c 53 4d 5f 4f 4b 20 29 7b 0a  ( rc!=LSM_OK ){.
02e0: 20 20 20 20 74 65 73 74 50 72 69 6e 74 45 72 72      testPrintErr
02f0: 6f 72 28 22 6c 73 6d 5f 6f 70 65 6e 28 29 3a 20  or("lsm_open(): 
0300: 72 63 3d 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20  rc=%d\n", rc);. 
0310: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
0320: 20 6c 73 6d 5f 6f 70 65 6e 28 70 44 62 2c 20 7a   lsm_open(pDb, z
0330: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  Db);.    if( rc!
0340: 3d 4c 53 4d 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  =LSM_OK ){.     
0350: 20 74 65 73 74 50 72 69 6e 74 45 72 72 6f 72 28   testPrintError(
0360: 22 6c 73 6d 5f 6f 70 65 6e 28 29 3a 20 72 63 3d  "lsm_open(): rc=
0370: 25 64 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 20 20  %d\n", rc);.    
0380: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
0390: 20 6e 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 6c   n = -1;.      l
03a0: 73 6d 5f 63 6f 6e 66 69 67 28 70 44 62 2c 20 4c  sm_config(pDb, L
03b0: 53 4d 5f 43 4f 4e 46 49 47 5f 42 4c 4f 43 4b 5f  SM_CONFIG_BLOCK_
03c0: 53 49 5a 45 2c 20 26 6e 29 3b 0a 20 20 20 20 20  SIZE, &n);.     
03d0: 20 6e 20 3d 20 6e 2a 32 3b 0a 20 20 20 20 20 20   n = n*2;.      
03e0: 6c 73 6d 5f 63 6f 6e 66 69 67 28 70 44 62 2c 20  lsm_config(pDb, 
03f0: 4c 53 4d 5f 43 4f 4e 46 49 47 5f 41 55 54 4f 43  LSM_CONFIG_AUTOC
0400: 48 45 43 4b 50 4f 49 4e 54 2c 20 26 6e 29 3b 0a  HECKPOINT, &n);.
0410: 0a 20 20 20 20 20 20 72 63 20 3d 20 6c 73 6d 5f  .      rc = lsm_
0420: 77 6f 72 6b 28 70 44 62 2c 20 6e 4d 65 72 67 65  work(pDb, nMerge
0430: 2c 20 6e 4b 42 2c 20 30 29 3b 0a 20 20 20 20 20  , nKB, 0);.     
0440: 20 69 66 28 20 72 63 21 3d 4c 53 4d 5f 4f 4b 20   if( rc!=LSM_OK 
0450: 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 50  ){.        testP
0460: 72 69 6e 74 45 72 72 6f 72 28 22 6c 73 6d 5f 77  rintError("lsm_w
0470: 6f 72 6b 28 29 3a 20 72 63 3d 25 64 5c 6e 22 2c  ork(): rc=%d\n",
0480: 20 72 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20   rc);.      }.  
0490: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
04a0: 3d 3d 4c 53 4d 5f 4f 4b 20 29 7b 0a 20 20 20 20  ==LSM_OK ){.    
04b0: 72 63 20 3d 20 6c 73 6d 5f 63 68 65 63 6b 70 6f  rc = lsm_checkpo
04c0: 69 6e 74 28 70 44 62 2c 20 30 29 3b 0a 20 20 7d  int(pDb, 0);.  }
04d0: 0a 0a 20 20 6c 73 6d 5f 63 6c 6f 73 65 28 70 44  ..  lsm_close(pD
04e0: 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  b);.  return rc;
04f0: 0a 0a 20 75 73 61 67 65 3a 0a 20 20 74 65 73 74  .. usage:.  test
0500: 50 72 69 6e 74 55 73 61 67 65 28 22 3f 2d 6f 70  PrintUsage("?-op
0510: 74 69 6d 69 7a 65 3f 20 3f 2d 6e 20 4e 3f 20 44  timize? ?-n N? D
0520: 41 54 41 42 41 53 45 22 29 3b 0a 20 20 72 65 74  ATABASE");.  ret
0530: 75 72 6e 20 2d 31 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  urn -1;.}.../*.*
0540: 2a 20 20 20 6c 73 6d 74 65 73 74 20 73 68 6f 77  *   lsmtest show
0550: 20 3f 2d 63 6f 6e 66 69 67 20 4c 53 4d 2d 43 4f   ?-config LSM-CO
0560: 4e 46 49 47 3f 20 44 41 54 41 42 41 53 45 20 3f  NFIG? DATABASE ?
0570: 43 4f 4d 4d 41 4e 44 20 3f 50 47 4e 4f 3f 3f 0a  COMMAND ?PGNO??.
0580: 2a 2f 0a 69 6e 74 20 64 6f 5f 73 68 6f 77 28 69  */.int do_show(i
0590: 6e 74 20 6e 41 72 67 2c 20 63 68 61 72 20 2a 2a  nt nArg, char **
05a0: 61 7a 41 72 67 29 7b 0a 20 20 6c 73 6d 5f 64 62  azArg){.  lsm_db
05b0: 20 2a 70 44 62 3b 0a 20 20 69 6e 74 20 72 63 3b   *pDb;.  int rc;
05c0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
05d0: 44 62 3b 0a 0a 20 20 69 6e 74 20 65 4f 70 74 20  Db;..  int eOpt 
05e0: 3d 20 4c 53 4d 5f 49 4e 46 4f 5f 44 42 5f 53 54  = LSM_INFO_DB_ST
05f0: 52 55 43 54 55 52 45 3b 0a 20 20 75 6e 73 69 67  RUCTURE;.  unsig
0600: 6e 65 64 20 69 6e 74 20 69 50 67 20 3d 20 30 3b  ned int iPg = 0;
0610: 0a 20 20 69 6e 74 20 62 43 6f 6e 66 69 67 20 3d  .  int bConfig =
0620: 20 30 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   0;.  const char
0630: 20 2a 7a 43 6f 6e 66 69 67 20 3d 20 22 22 3b 0a   *zConfig = "";.
0640: 0a 20 20 73 74 72 75 63 74 20 4f 70 74 69 6f 6e  .  struct Option
0650: 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61   {.    const cha
0660: 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 69 6e  r *zName;.    in
0670: 74 20 62 43 6f 6e 66 69 67 3b 0a 20 20 20 20 69  t bConfig;.    i
0680: 6e 74 20 65 4f 70 74 3b 0a 20 20 7d 20 61 4f 70  nt eOpt;.  } aOp
0690: 74 20 5b 5d 20 3d 20 7b 20 0a 20 20 20 20 7b 20  t [] = { .    { 
06a0: 22 61 72 72 61 79 22 2c 20 20 20 20 20 20 20 30  "array",       0
06b0: 2c 20 4c 53 4d 5f 49 4e 46 4f 5f 41 52 52 41 59  , LSM_INFO_ARRAY
06c0: 5f 53 54 52 55 43 54 55 52 45 20 7d 2c 0a 20 20  _STRUCTURE },.  
06d0: 20 20 7b 20 22 61 72 72 61 79 2d 70 61 67 65 73    { "array-pages
06e0: 22 2c 20 30 2c 20 4c 53 4d 5f 49 4e 46 4f 5f 41  ", 0, LSM_INFO_A
06f0: 52 52 41 59 5f 50 41 47 45 53 20 7d 2c 0a 20 20  RRAY_PAGES },.  
0700: 20 20 7b 20 22 62 6c 6f 63 6b 73 69 7a 65 22 2c    { "blocksize",
0710: 20 20 20 31 2c 20 4c 53 4d 5f 43 4f 4e 46 49 47     1, LSM_CONFIG
0720: 5f 42 4c 4f 43 4b 5f 53 49 5a 45 20 7d 2c 0a 20  _BLOCK_SIZE },. 
0730: 20 20 20 7b 20 22 70 61 67 65 73 69 7a 65 22 2c     { "pagesize",
0740: 20 20 20 20 31 2c 20 4c 53 4d 5f 43 4f 4e 46 49      1, LSM_CONFI
0750: 47 5f 50 41 47 45 5f 53 49 5a 45 20 7d 2c 0a 20  G_PAGE_SIZE },. 
0760: 20 20 20 7b 20 22 66 72 65 65 6c 69 73 74 22 2c     { "freelist",
0770: 20 20 20 20 30 2c 20 4c 53 4d 5f 49 4e 46 4f 5f      0, LSM_INFO_
0780: 46 52 45 45 4c 49 53 54 20 7d 2c 0a 20 20 20 20  FREELIST },.    
0790: 7b 20 22 70 61 67 65 2d 61 73 63 69 69 22 2c 20  { "page-ascii", 
07a0: 20 30 2c 20 4c 53 4d 5f 49 4e 46 4f 5f 50 41 47   0, LSM_INFO_PAG
07b0: 45 5f 41 53 43 49 49 5f 44 55 4d 50 20 7d 2c 0a  E_ASCII_DUMP },.
07c0: 20 20 20 20 7b 20 22 70 61 67 65 2d 68 65 78 22      { "page-hex"
07d0: 2c 20 20 20 20 30 2c 20 4c 53 4d 5f 49 4e 46 4f  ,    0, LSM_INFO
07e0: 5f 50 41 47 45 5f 48 45 58 5f 44 55 4d 50 20 7d  _PAGE_HEX_DUMP }
07f0: 2c 0a 20 20 20 20 7b 20 30 2c 20 30 20 7d 20 0a  ,.    { 0, 0 } .
0800: 20 20 7d 3b 0a 0a 20 20 63 68 61 72 20 2a 7a 20    };..  char *z 
0810: 3d 20 30 3b 20 0a 20 20 69 6e 74 20 69 44 62 20  = 0; .  int iDb 
0820: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
0830: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
0840: 20 6f 66 20 44 41 54 41 42 41 53 45 20 69 6e 20   of DATABASE in 
0850: 61 7a 41 72 67 5b 5d 20 2a 2f 0a 0a 20 20 2f 2a  azArg[] */..  /*
0860: 20 43 68 65 63 6b 20 69 66 20 74 68 65 72 65 20   Check if there 
0870: 69 73 20 61 20 22 2d 63 6f 6e 66 69 67 22 20 6f  is a "-config" o
0880: 70 74 69 6f 6e 3a 20 2a 2f 0a 20 20 69 66 28 20  ption: */.  if( 
0890: 6e 41 72 67 3e 32 20 26 26 20 73 74 72 6c 65 6e  nArg>2 && strlen
08a0: 28 61 7a 41 72 67 5b 30 5d 29 3e 31 20 0a 20 20  (azArg[0])>1 .  
08b0: 20 26 26 20 6d 65 6d 63 6d 70 28 61 7a 41 72 67   && memcmp(azArg
08c0: 5b 30 5d 2c 20 22 2d 63 6f 6e 66 69 67 22 2c 20  [0], "-config", 
08d0: 73 74 72 6c 65 6e 28 61 7a 41 72 67 5b 30 5d 29  strlen(azArg[0])
08e0: 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a 43  )==0.  ){.    zC
08f0: 6f 6e 66 69 67 20 3d 20 61 7a 41 72 67 5b 31 5d  onfig = azArg[1]
0900: 3b 0a 20 20 20 20 69 44 62 20 3d 20 32 3b 0a 20  ;.    iDb = 2;. 
0910: 20 7d 0a 20 20 69 66 28 20 6e 41 72 67 3c 28 69   }.  if( nArg<(i
0920: 44 62 2b 31 29 20 29 20 67 6f 74 6f 20 75 73 61  Db+1) ) goto usa
0930: 67 65 3b 0a 0a 20 20 69 66 28 20 6e 41 72 67 3e  ge;..  if( nArg>
0940: 28 69 44 62 2b 31 29 20 29 7b 0a 20 20 20 20 72  (iDb+1) ){.    r
0950: 63 20 3d 20 74 65 73 74 41 72 67 53 65 6c 65 63  c = testArgSelec
0960: 74 28 61 4f 70 74 2c 20 22 6f 70 74 69 6f 6e 22  t(aOpt, "option"
0970: 2c 20 61 7a 41 72 67 5b 69 44 62 2b 31 5d 2c 20  , azArg[iDb+1], 
0980: 26 65 4f 70 74 29 3b 0a 20 20 20 20 69 66 28 20  &eOpt);.    if( 
0990: 72 63 21 3d 30 20 29 20 72 65 74 75 72 6e 20 72  rc!=0 ) return r
09a0: 63 3b 0a 20 20 20 20 62 43 6f 6e 66 69 67 20 3d  c;.    bConfig =
09b0: 20 61 4f 70 74 5b 65 4f 70 74 5d 2e 62 43 6f 6e   aOpt[eOpt].bCon
09c0: 66 69 67 3b 0a 20 20 20 20 65 4f 70 74 20 3d 20  fig;.    eOpt = 
09d0: 61 4f 70 74 5b 65 4f 70 74 5d 2e 65 4f 70 74 3b  aOpt[eOpt].eOpt;
09e0: 0a 20 20 20 20 69 66 28 20 28 62 43 6f 6e 66 69  .    if( (bConfi
09f0: 67 3d 3d 30 20 26 26 20 65 4f 70 74 3d 3d 4c 53  g==0 && eOpt==LS
0a00: 4d 5f 49 4e 46 4f 5f 46 52 45 45 4c 49 53 54 29  M_INFO_FREELIST)
0a10: 0a 20 20 20 20 20 7c 7c 20 28 62 43 6f 6e 66 69  .     || (bConfi
0a20: 67 3d 3d 31 20 26 26 20 65 4f 70 74 3d 3d 4c 53  g==1 && eOpt==LS
0a30: 4d 5f 43 4f 4e 46 49 47 5f 42 4c 4f 43 4b 5f 53  M_CONFIG_BLOCK_S
0a40: 49 5a 45 29 0a 20 20 20 20 20 7c 7c 20 28 62 43  IZE).     || (bC
0a50: 6f 6e 66 69 67 3d 3d 31 20 26 26 20 65 4f 70 74  onfig==1 && eOpt
0a60: 3d 3d 4c 53 4d 5f 43 4f 4e 46 49 47 5f 50 41 47  ==LSM_CONFIG_PAG
0a70: 45 5f 53 49 5a 45 29 0a 20 20 20 20 29 7b 0a 20  E_SIZE).    ){. 
0a80: 20 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d 28       if( nArg!=(
0a90: 69 44 62 2b 32 29 20 29 20 67 6f 74 6f 20 75 73  iDb+2) ) goto us
0aa0: 61 67 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  age;.    }else{.
0ab0: 20 20 20 20 20 20 69 66 28 20 6e 41 72 67 21 3d        if( nArg!=
0ac0: 28 69 44 62 2b 33 29 20 29 20 67 6f 74 6f 20 75  (iDb+3) ) goto u
0ad0: 73 61 67 65 3b 0a 20 20 20 20 20 20 69 50 67 20  sage;.      iPg 
0ae0: 3d 20 61 74 6f 69 28 61 7a 41 72 67 5b 69 44 62  = atoi(azArg[iDb
0af0: 2b 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  +2]);.    }.  }.
0b00: 20 20 7a 44 62 20 3d 20 61 7a 41 72 67 5b 69 44    zDb = azArg[iD
0b10: 62 5d 3b 0a 0a 20 20 72 63 20 3d 20 6c 73 6d 5f  b];..  rc = lsm_
0b20: 6e 65 77 28 30 2c 20 26 70 44 62 29 3b 0a 20 20  new(0, &pDb);.  
0b30: 74 64 62 5f 6c 73 6d 5f 63 6f 6e 66 69 67 75 72  tdb_lsm_configur
0b40: 65 28 70 44 62 2c 20 7a 43 6f 6e 66 69 67 29 3b  e(pDb, zConfig);
0b50: 0a 20 20 69 66 28 20 72 63 21 3d 4c 53 4d 5f 4f  .  if( rc!=LSM_O
0b60: 4b 20 29 7b 0a 20 20 20 20 74 65 73 74 50 72 69  K ){.    testPri
0b70: 6e 74 45 72 72 6f 72 28 22 6c 73 6d 5f 6e 65 77  ntError("lsm_new
0b80: 28 29 3a 20 72 63 3d 25 64 5c 6e 22 2c 20 72 63  (): rc=%d\n", rc
0b90: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
0ba0: 72 63 20 3d 20 6c 73 6d 5f 6f 70 65 6e 28 70 44  rc = lsm_open(pD
0bb0: 62 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  b, zDb);.    if(
0bc0: 20 72 63 21 3d 4c 53 4d 5f 4f 4b 20 29 7b 0a 20   rc!=LSM_OK ){. 
0bd0: 20 20 20 20 20 74 65 73 74 50 72 69 6e 74 45 72       testPrintEr
0be0: 72 6f 72 28 22 6c 73 6d 5f 6f 70 65 6e 28 29 3a  ror("lsm_open():
0bf0: 20 72 63 3d 25 64 5c 6e 22 2c 20 72 63 29 3b 0a   rc=%d\n", rc);.
0c00: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 69 66 28      }.  }..  if(
0c10: 20 72 63 3d 3d 4c 53 4d 5f 4f 4b 20 29 7b 0a 20   rc==LSM_OK ){. 
0c20: 20 20 20 69 66 28 20 62 43 6f 6e 66 69 67 3d 3d     if( bConfig==
0c30: 30 20 29 7b 0a 20 20 20 20 20 20 73 77 69 74 63  0 ){.      switc
0c40: 68 28 20 65 4f 70 74 20 29 7b 0a 20 20 20 20 20  h( eOpt ){.     
0c50: 20 20 20 63 61 73 65 20 4c 53 4d 5f 49 4e 46 4f     case LSM_INFO
0c60: 5f 44 42 5f 53 54 52 55 43 54 55 52 45 3a 0a 20  _DB_STRUCTURE:. 
0c70: 20 20 20 20 20 20 20 63 61 73 65 20 4c 53 4d 5f         case LSM_
0c80: 49 4e 46 4f 5f 46 52 45 45 4c 49 53 54 3a 0a 20  INFO_FREELIST:. 
0c90: 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 6c 73           rc = ls
0ca0: 6d 5f 69 6e 66 6f 28 70 44 62 2c 20 65 4f 70 74  m_info(pDb, eOpt
0cb0: 2c 20 26 7a 29 3b 0a 20 20 20 20 20 20 20 20 20  , &z);.         
0cc0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
0cd0: 63 61 73 65 20 4c 53 4d 5f 49 4e 46 4f 5f 41 52  case LSM_INFO_AR
0ce0: 52 41 59 5f 53 54 52 55 43 54 55 52 45 3a 0a 20  RAY_STRUCTURE:. 
0cf0: 20 20 20 20 20 20 20 63 61 73 65 20 4c 53 4d 5f         case LSM_
0d00: 49 4e 46 4f 5f 41 52 52 41 59 5f 50 41 47 45 53  INFO_ARRAY_PAGES
0d10: 3a 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 4c  :.        case L
0d20: 53 4d 5f 49 4e 46 4f 5f 50 41 47 45 5f 41 53 43  SM_INFO_PAGE_ASC
0d30: 49 49 5f 44 55 4d 50 3a 0a 20 20 20 20 20 20 20  II_DUMP:.       
0d40: 20 63 61 73 65 20 4c 53 4d 5f 49 4e 46 4f 5f 50   case LSM_INFO_P
0d50: 41 47 45 5f 48 45 58 5f 44 55 4d 50 3a 0a 20 20  AGE_HEX_DUMP:.  
0d60: 20 20 20 20 20 20 20 20 72 63 20 3d 20 6c 73 6d          rc = lsm
0d70: 5f 69 6e 66 6f 28 70 44 62 2c 20 65 4f 70 74 2c  _info(pDb, eOpt,
0d80: 20 69 50 67 2c 20 26 7a 29 3b 0a 20 20 20 20 20   iPg, &z);.     
0d90: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0da0: 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20      default:.   
0db0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21         assert( !
0dc0: 22 6e 6f 20 63 68 61 6e 63 65 22 20 29 3b 0a 20  "no chance" );. 
0dd0: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66       }..      if
0de0: 28 20 72 63 3d 3d 4c 53 4d 5f 4f 4b 20 29 7b 0a  ( rc==LSM_OK ){.
0df0: 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
0e00: 25 73 5c 6e 22 2c 20 7a 20 3f 20 7a 20 3a 20 22  %s\n", z ? z : "
0e10: 22 29 3b 0a 20 20 20 20 20 20 20 20 66 66 6c 75  ");.        fflu
0e20: 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20  sh(stdout);.    
0e30: 20 20 7d 0a 20 20 20 20 20 20 6c 73 6d 5f 66 72    }.      lsm_fr
0e40: 65 65 28 6c 73 6d 5f 67 65 74 5f 65 6e 76 28 70  ee(lsm_get_env(p
0e50: 44 62 29 2c 20 7a 29 3b 0a 20 20 20 20 7d 65 6c  Db), z);.    }el
0e60: 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 52  se{.      int iR
0e70: 65 73 20 3d 20 2d 31 3b 0a 20 20 20 20 20 20 6c  es = -1;.      l
0e80: 73 6d 5f 63 6f 6e 66 69 67 28 70 44 62 2c 20 65  sm_config(pDb, e
0e90: 4f 70 74 2c 20 26 69 52 65 73 29 3b 0a 20 20 20  Opt, &iRes);.   
0ea0: 20 20 20 70 72 69 6e 74 66 28 22 25 64 5c 6e 22     printf("%d\n"
0eb0: 2c 20 69 52 65 73 29 3b 0a 20 20 20 20 20 20 66  , iRes);.      f
0ec0: 66 6c 75 73 68 28 73 74 64 6f 75 74 29 3b 0a 20  flush(stdout);. 
0ed0: 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 6c 73 6d 5f     }.  }..  lsm_
0ee0: 63 6c 6f 73 65 28 70 44 62 29 3b 0a 20 20 72 65  close(pDb);.  re
0ef0: 74 75 72 6e 20 72 63 3b 0a 0a 20 75 73 61 67 65  turn rc;.. usage
0f00: 3a 0a 20 20 74 65 73 74 50 72 69 6e 74 55 73 61  :.  testPrintUsa
0f10: 67 65 28 22 44 41 54 41 42 41 53 45 20 3f 61 72  ge("DATABASE ?ar
0f20: 72 61 79 7c 70 61 67 65 2d 61 73 63 69 69 7c 70  ray|page-ascii|p
0f30: 61 67 65 2d 68 65 78 20 50 47 4e 4f 3f 22 29 3b  age-hex PGNO?");
0f40: 0a 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a 7d 0a  .  return -1;.}.