Lines Matching refs:p
39 static void ofstError(GState *p, const char *zFormat, ...){ in ofstError() argument
41 sqlite3_free(p->zErr); in ofstError()
43 p->zErr = sqlite3_vmprintf(zFormat, ap); in ofstError()
50 static void ofstTrace(GState *p, const char *zFormat, ...){ in ofstTrace() argument
52 if( p->bTrace ){ in ofstTrace()
63 GState *p, /* Global state */ in ofstRootAndColumn() argument
72 if( p->zErr ) return; in ofstRootAndColumn()
75 ofstError(p, "cannot open database file \"%s\"", zFile); in ofstRootAndColumn()
81 if( rc ) ofstError(p, "%s: [%s]", sqlite3_errmsg(db), zSql); in ofstRootAndColumn()
83 if( p->zErr ) goto rootAndColumn_exit; in ofstRootAndColumn()
85 ofstError(p, "cannot find table [%s]\n", zTable); in ofstRootAndColumn()
89 p->iRoot = sqlite3_column_int(pStmt , 0); in ofstRootAndColumn()
92 p->iCol = -1; in ofstRootAndColumn()
95 if( rc ) ofstError(p, "%s: [%s}", sqlite3_errmsg(db), zSql); in ofstRootAndColumn()
97 if( p->zErr ) goto rootAndColumn_exit; in ofstRootAndColumn()
103 p->iCol = sqlite3_column_int(pStmt, 0); in ofstRootAndColumn()
108 if( p->iCol<0 ){ in ofstRootAndColumn()
109 ofstError(p, "no such column: %s.%s", zTable, zColumn); in ofstRootAndColumn()
115 if( rc ) ofstError(p, "%s: [%s]", sqlite3_errmsg(db), zSql); in ofstRootAndColumn()
117 if( p->zErr ) goto rootAndColumn_exit; in ofstRootAndColumn()
119 ofstError(p, "cannot find page size"); in ofstRootAndColumn()
121 p->szPg = sqlite3_column_int(pStmt, 0); in ofstRootAndColumn()
133 static void ofstPopPage(GState *p){ in ofstPopPage() argument
134 if( p->nStack<=0 ) return; in ofstPopPage()
135 p->nStack--; in ofstPopPage()
136 sqlite3_free(p->aStack[p->nStack]); in ofstPopPage()
137 p->pgno = p->aPgno[p->nStack-1]; in ofstPopPage()
138 p->aPage = p->aStack[p->nStack-1]; in ofstPopPage()
145 static void ofstPushPage(GState *p, int pgno){ in ofstPushPage() argument
148 if( p->zErr ) return; in ofstPushPage()
149 if( p->nStack >= ArraySize(p->aStack) ){ in ofstPushPage()
150 ofstError(p, "page stack overflow"); in ofstPushPage()
153 p->aPgno[p->nStack] = pgno; in ofstPushPage()
154 p->aStack[p->nStack] = pPage = sqlite3_malloc( p->szPg ); in ofstPushPage()
159 p->nStack++; in ofstPushPage()
160 p->aPage = pPage; in ofstPushPage()
161 p->pgno = pgno; in ofstPushPage()
162 fseek(p->f, (pgno-1)*p->szPg, SEEK_SET); in ofstPushPage()
163 got = fread(pPage, 1, p->szPg, p->f); in ofstPushPage()
164 if( got!=p->szPg ){ in ofstPushPage()
165 ofstError(p, "unable to read page %d", pgno); in ofstPushPage()
166 ofstPopPage(p); in ofstPushPage()
171 static int ofst2byte(GState *p, int ofst){ in ofst2byte() argument
172 int x = p->aPage[ofst]; in ofst2byte()
173 return (x<<8) + p->aPage[ofst+1]; in ofst2byte()
177 static int ofst4byte(GState *p, int ofst){ in ofst4byte() argument
178 int x = p->aPage[ofst]; in ofst4byte()
179 x = (x<<8) + p->aPage[ofst+1]; in ofst4byte()
180 x = (x<<8) + p->aPage[ofst+2]; in ofst4byte()
181 x = (x<<8) + p->aPage[ofst+3]; in ofst4byte()
186 static sqlite3_int64 ofstVarint(GState *p, int *pOfst){ in ofstVarint() argument
188 u8 *a = &p->aPage[*pOfst]; in ofstVarint()
206 static int ofstInFile(GState *p, int ofst){ in ofstInFile() argument
207 return p->szPg*(p->pgno-1) + ofst; in ofstInFile()
224 static void ofstWalkInteriorPage(GState *p){ in ofstWalkInteriorPage() argument
230 nCell = ofst2byte(p, 3); in ofstWalkInteriorPage()
232 ofst = ofst2byte(p, 12+i*2); in ofstWalkInteriorPage()
233 iChild = ofst4byte(p, ofst); in ofstWalkInteriorPage()
234 ofstWalkPage(p, iChild); in ofstWalkInteriorPage()
235 if( p->zErr ) return; in ofstWalkInteriorPage()
237 ofstWalkPage(p, ofst4byte(p, 8)); in ofstWalkInteriorPage()
241 static void ofstWalkLeafPage(GState *p){ in ofstWalkLeafPage() argument
254 nCell = ofst2byte(p, 3); in ofstWalkLeafPage()
256 ofst = ofst2byte(p, 8+i*2); in ofstWalkLeafPage()
257 nPayload = ofstVarint(p, &ofst); in ofstWalkLeafPage()
258 rowid = ofstVarint(p, &ofst); in ofstWalkLeafPage()
259 if( nPayload > p->szPg-35 ){ in ofstWalkLeafPage()
266 nHdr = ofstVarint(p, &ofst); in ofstWalkLeafPage()
268 for(j=0; j<p->iCol; j++){ in ofstWalkLeafPage()
269 scode = ofstVarint(p, &ofst); in ofstWalkLeafPage()
272 scode = ofstVarint(p, &ofst); in ofstWalkLeafPage()
276 rowid, sz, ofstInFile(p, dataOfst)); in ofstWalkLeafPage()
284 static void ofstWalkPage(GState *p, int pgno){ in ofstWalkPage() argument
285 if( p->zErr ) return; in ofstWalkPage()
286 ofstPushPage(p, pgno); in ofstWalkPage()
287 if( p->zErr ) return; in ofstWalkPage()
288 if( p->aPage[0]==5 ){ in ofstWalkPage()
289 ofstWalkInteriorPage(p); in ofstWalkPage()
290 }else if( p->aPage[0]==13 ){ in ofstWalkPage()
291 ofstWalkLeafPage(p); in ofstWalkPage()
293 ofstError(p, "page %d has a faulty type byte: %d", pgno, p->aPage[0]); in ofstWalkPage()
295 ofstPopPage(p); in ofstWalkPage()