Lines Matching refs:p
89 static void worker_trace(WorkerInfo *p, const char *zFormat, ...){ in worker_trace() argument
92 if( (p->wkrFlags & TT4_TRACE)==0 ) return; in worker_trace()
97 fprintf(stderr, "TRACE(%02d): %s\n", p->tid, zMsg); in worker_trace()
127 static void run_sql(WorkerInfo *p, const char *zFormat, ...){ in run_sql() argument
138 rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); in run_sql()
141 rc, sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db), zSql); in run_sql()
144 worker_trace(p, "running [%s]", zSql); in run_sql()
150 worker_trace(p, "retry %d for [%s]", nRetry, zSql); in run_sql()
155 p->tid, zSql); in run_sql()
161 rc, sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db), zSql); in run_sql()
174 static void worker_open_connection(WorkerInfo *p, int iCnt){ in worker_open_connection() argument
186 x = (p->tid + iCnt) % 6; in worker_open_connection()
189 worker_trace(p, "open %s", zFile); in worker_open_connection()
190 rc = sqlite3_open_v2(zFile, &p->db, in worker_open_connection()
194 zFile, p->tid); in worker_open_connection()
198 run_sql(p, "PRAGMA read_uncommitted=ON;"); in worker_open_connection()
199 sqlite3_busy_timeout(p->db, 10000); in worker_open_connection()
200 run_sql(p, "PRAGMA synchronous=OFF;"); in worker_open_connection()
201 run_sql(p, "ATTACH 'tt4-test%d.db' AS aux1", aOrder[x][1]); in worker_open_connection()
202 run_sql(p, "ATTACH 'tt4-test%d.db' AS aux2", aOrder[x][2]); in worker_open_connection()
208 static void worker_close_connection(WorkerInfo *p){ in worker_close_connection() argument
209 if( p->db ){ in worker_close_connection()
210 worker_trace(p, "close"); in worker_close_connection()
211 sqlite3_close(p->db); in worker_close_connection()
212 p->db = 0; in worker_close_connection()
222 static void worker_delete_all_content(WorkerInfo *p, int inTrans){ in worker_delete_all_content() argument
224 pthread_mutex_lock(p->pWrMutex); in worker_delete_all_content()
225 run_sql(p, "BEGIN"); in worker_delete_all_content()
226 run_sql(p, "DELETE FROM t1 WHERE tid=%d", p->tid); in worker_delete_all_content()
227 run_sql(p, "DELETE FROM t2 WHERE tid=%d", p->tid); in worker_delete_all_content()
228 run_sql(p, "DELETE FROM t3 WHERE tid=%d", p->tid); in worker_delete_all_content()
229 run_sql(p, "COMMIT"); in worker_delete_all_content()
230 pthread_mutex_unlock(p->pWrMutex); in worker_delete_all_content()
231 p->nTest++; in worker_delete_all_content()
233 pthread_mutex_lock(p->pWrMutex); in worker_delete_all_content()
234 run_sql(p, "DELETE FROM t1 WHERE tid=%d", p->tid); in worker_delete_all_content()
235 pthread_mutex_unlock(p->pWrMutex); in worker_delete_all_content()
236 p->nTest++; in worker_delete_all_content()
237 pthread_mutex_lock(p->pWrMutex); in worker_delete_all_content()
238 run_sql(p, "DELETE FROM t2 WHERE tid=%d", p->tid); in worker_delete_all_content()
239 pthread_mutex_unlock(p->pWrMutex); in worker_delete_all_content()
240 p->nTest++; in worker_delete_all_content()
241 pthread_mutex_lock(p->pWrMutex); in worker_delete_all_content()
242 run_sql(p, "DELETE FROM t3 WHERE tid=%d", p->tid); in worker_delete_all_content()
243 pthread_mutex_unlock(p->pWrMutex); in worker_delete_all_content()
244 p->nTest++; in worker_delete_all_content()
251 static void worker_add_content(WorkerInfo *p, int mn, int mx, int iTab){ in worker_add_content() argument
258 pthread_mutex_lock(p->pWrMutex); in worker_add_content()
259 run_sql(p, in worker_add_content()
263 mn, mx, zTabDef, p->tid in worker_add_content()
265 pthread_mutex_unlock(p->pWrMutex); in worker_add_content()
266 p->nTest++; in worker_add_content()
272 static void worker_error(WorkerInfo *p, const char *zFormat, ...){ in worker_error() argument
274 p->nErr++; in worker_error()
275 sqlite3_free(p->zMsg); in worker_error()
277 p->zMsg = sqlite3_vmprintf(zFormat, ap); in worker_error()
285 WorkerInfo *p = (WorkerInfo*)pArg; in worker_thread() local
291 printf("worker %d startup\n", p->tid); fflush(stdout); in worker_thread()
292 for(iOuter=1; iOuter<=p->nWorker; iOuter++){ in worker_thread()
293 worker_open_connection(p, iOuter); in worker_thread()
295 worker_add_content(p, i*100+1, (i+1)*100, (p->tid+iOuter)%3 + 1); in worker_thread()
296 worker_add_content(p, i*100+1, (i+1)*100, (p->tid+iOuter+1)%3 + 1); in worker_thread()
297 worker_add_content(p, i*100+1, (i+1)*100, (p->tid+iOuter+2)%3 + 1); in worker_thread()
300 pStmt = prep_sql(p->db, "SELECT count(a) FROM t1 WHERE tid=%d", p->tid); in worker_thread()
301 worker_trace(p, "query [%s]", sqlite3_sql(pStmt)); in worker_thread()
304 worker_error(p, "Failed to step: %s", sqlite3_sql(pStmt)); in worker_thread()
306 worker_error(p, "Wrong result: %d", sqlite3_column_int(pStmt,0)); in worker_thread()
309 if( p->nErr ) break; in worker_thread()
311 if( ((iOuter+p->tid)%3)==0 ){ in worker_thread()
312 sqlite3_db_release_memory(p->db); in worker_thread()
313 p->nTest++; in worker_thread()
316 pthread_mutex_lock(p->pWrMutex); in worker_thread()
317 run_sql(p, "BEGIN;"); in worker_thread()
318 run_sql(p, "UPDATE t1 SET c=NULL WHERE a=55"); in worker_thread()
319 run_sql(p, "UPDATE t2 SET f=NULL WHERE d=42"); in worker_thread()
320 run_sql(p, "UPDATE t3 SET z=NULL WHERE x=31"); in worker_thread()
321 run_sql(p, "ROLLBACK;"); in worker_thread()
322 p->nTest++; in worker_thread()
323 pthread_mutex_unlock(p->pWrMutex); in worker_thread()
326 if( iOuter==p->tid ){ in worker_thread()
327 pthread_mutex_lock(p->pWrMutex); in worker_thread()
328 run_sql(p, "VACUUM"); in worker_thread()
329 pthread_mutex_unlock(p->pWrMutex); in worker_thread()
332 pStmt = prep_sql(p->db, in worker_thread()
338 ,p->tid, p->tid, p->tid); in worker_thread()
339 worker_trace(p, "query [%s]", sqlite3_sql(pStmt)); in worker_thread()
340 for(i=0; i<p->nWorker; i++){ in worker_thread()
343 worker_error(p, "Failed to step: %s", sqlite3_sql(pStmt)); in worker_thread()
349 if( p->nErr ) break; in worker_thread()
351 worker_delete_all_content(p, (p->tid+iOuter)%2); in worker_thread()
352 worker_close_connection(p); in worker_thread()
353 p->db = 0; in worker_thread()
355 worker_close_connection(p); in worker_thread()
356 printf("worker %d finished\n", p->tid); fflush(stdout); in worker_thread()
371 WorkerInfo *p; /* Pointer to infoTop */ in main() local
436 p = &infoTop; in main()
438 run_sql(p, "PRAGMA journal_mode=WAL"); in main()
440 run_sql(p, "PRAGMA synchronous=OFF"); in main()
441 run_sql(p, "CREATE TABLE IF NOT EXISTS t1(tid INTEGER, sp, a, b, c)"); in main()
442 run_sql(p, "CREATE INDEX t1tid ON t1(tid)"); in main()
443 run_sql(p, "CREATE INDEX t1ab ON t1(a,b)"); in main()
444 run_sql(p, "ATTACH 'tt4-test2.db' AS 'test2'"); in main()
445 run_sql(p, "CREATE TABLE IF NOT EXISTS test2.t2(tid INTEGER, sp, d, e, f)"); in main()
446 run_sql(p, "CREATE INDEX test2.t2tid ON t2(tid)"); in main()
447 run_sql(p, "CREATE INDEX test2.t2de ON t2(d,e)"); in main()
448 run_sql(p, "ATTACH 'tt4-test3.db' AS 'test3'"); in main()
449 run_sql(p, "CREATE TABLE IF NOT EXISTS test3.t3(tid INTEGER, sp, x, y, z)"); in main()
450 run_sql(p, "CREATE INDEX test3.t3tid ON t3(tid)"); in main()
451 run_sql(p, "CREATE INDEX test3.t3xy ON t3(x,y)"); in main()