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 }