Update test file walprotocol.test to account for the changes in the wal
[sqlite.git] / ext / lsm1 / lsm-test / lsmtest_func.c
blobeb8346aa8361ee0b1d5e75faa9e228f31914844c
2 #include "lsmtest.h"
5 int do_work(int nArg, char **azArg){
6 struct Option {
7 const char *zName;
8 } aOpt [] = {
9 { "-nmerge" },
10 { "-nkb" },
11 { 0 }
14 lsm_db *pDb;
15 int rc;
16 int i;
17 const char *zDb;
18 int nMerge = 1;
19 int nKB = (1<<30);
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;
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);
54 rc = lsm_work(pDb, nMerge, nKB, 0);
55 if( rc!=LSM_OK ){
56 testPrintError("lsm_work(): rc=%d\n", rc);
60 if( rc==LSM_OK ){
61 rc = lsm_checkpoint(pDb, 0);
64 lsm_close(pDb);
65 return rc;
67 usage:
68 testPrintUsage("?-optimize? ?-n N? DATABASE");
69 return -1;
74 ** lsmtest show ?-config LSM-CONFIG? DATABASE ?COMMAND ?PGNO??
76 int do_show(int nArg, char **azArg){
77 lsm_db *pDb;
78 int rc;
79 const char *zDb;
81 int eOpt = LSM_INFO_DB_STRUCTURE;
82 unsigned int iPg = 0;
83 int bConfig = 0;
84 const char *zConfig = "";
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 }
101 char *z = 0;
102 int iDb = 0; /* Index of DATABASE in azArg[] */
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
108 zConfig = azArg[1];
109 iDb = 2;
111 if( nArg<(iDb+1) ) goto usage;
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)
122 if( nArg!=(iDb+2) ) goto usage;
123 }else{
124 if( nArg!=(iDb+3) ) goto usage;
125 iPg = atoi(azArg[iDb+2]);
128 zDb = azArg[iDb];
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);
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" );
158 if( rc==LSM_OK ){
159 printf("%s\n", z ? z : "");
160 fflush(stdout);
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);
171 lsm_close(pDb);
172 return rc;
174 usage:
175 testPrintUsage("DATABASE ?array|page-ascii|page-hex PGNO?");
176 return -1;