1 /* 2 ** 2006 January 07 3 ** 4 ** The author disclaims copyright to this source code. In place of 5 ** a legal notice, here is a blessing: 6 ** 7 ** May you do good and not evil. 8 ** May you find forgiveness for yourself and forgive others. 9 ** May you share freely, never taking more than you give. 10 ** 11 ****************************************************************************** 12 ** 13 ** This file contains demonstration code. Nothing in this file gets compiled 14 ** or linked into the SQLite library unless you use a non-standard option: 15 ** 16 ** -DSQLITE_SERVER=1 17 ** 18 ** The configure script will never generate a Makefile with the option 19 ** above. You will need to manually modify the Makefile if you want to 20 ** include any of the code from this file in your project. Or, at your 21 ** option, you may copy and paste the code from this file and 22 ** thereby avoiding a recompile of SQLite. 23 ** 24 ** 25 ** This source file demonstrates how to use SQLite to create an SQL database 26 ** server thread in a multiple-threaded program. One or more client threads 27 ** send messages to the server thread and the server thread processes those 28 ** messages in the order received and returns the results to the client. 29 ** 30 ** One might ask: "Why bother? Why not just let each thread connect 31 ** to the database directly?" There are a several of reasons to 32 ** prefer the client/server approach. 33 ** 34 ** (1) Some systems (ex: Redhat9) have broken threading implementations 35 ** that prevent SQLite database connections from being used in 36 ** a thread different from the one where they were created. With 37 ** the client/server approach, all database connections are created 38 ** and used within the server thread. Client calls to the database 39 ** can be made from multiple threads (though not at the same time!) 40 ** 41 ** (2) Beginning with SQLite version 3.3.0, when two or more 42 ** connections to the same database occur within the same thread, 43 ** they can optionally share their database cache. This reduces 44 ** I/O and memory requirements. Cache shared is controlled using 45 ** the sqlite3_enable_shared_cache() API. 46 ** 47 ** (3) Database connections on a shared cache use table-level locking 48 ** instead of file-level locking for improved concurrency. 49 ** 50 ** (4) Database connections on a shared cache can by optionally 51 ** set to READ UNCOMMITTED isolation. (The default isolation for 52 ** SQLite is SERIALIZABLE.) When this occurs, readers will 53 ** never be blocked by a writer and writers will not be 54 ** blocked by readers. There can still only be a single writer 55 ** at a time, but multiple readers can simultaneously exist with 56 ** that writer. This is a huge increase in concurrency. 57 ** 58 ** To summarize the rational for using a client/server approach: prior 59 ** to SQLite version 3.3.0 it probably was not worth the trouble. But 60 ** with SQLite version 3.3.0 and beyond you can get significant performance 61 ** and concurrency improvements and memory usage reductions by going 62 ** client/server. 63 ** 64 ** Note: The extra features of version 3.3.0 described by points (2) 65 ** through (4) above are only available if you compile without the 66 ** option -DSQLITE_OMIT_SHARED_CACHE. 67 ** 68 ** Here is how the client/server approach works: The database server 69 ** thread is started on this procedure: 70 ** 71 ** void *sqlite3_server(void *NotUsed); 72 ** 73 ** The sqlite_server procedure runs as long as the g.serverHalt variable 74 ** is false. A mutex is used to make sure no more than one server runs 75 ** at a time. The server waits for messages to arrive on a message 76 ** queue and processes the messages in order. 77 ** 78 ** Two convenience routines are provided for starting and stopping the 79 ** server thread: 80 ** 81 ** void sqlite3_server_start(void); 82 ** void sqlite3_server_stop(void); 83 ** 84 ** Both of the convenience routines return immediately. Neither will 85 ** ever give an error. If a server is already started or already halted, 86 ** then the routines are effectively no-ops. 87 ** 88 ** Clients use the following interfaces: 89 ** 90 ** sqlite3_client_open 91 ** sqlite3_client_prepare 92 ** sqlite3_client_step 93 ** sqlite3_client_reset 94 ** sqlite3_client_finalize 95 ** sqlite3_client_close 96 ** 97 ** These interfaces work exactly like the standard core SQLite interfaces 98 ** having the same names without the "_client_" infix. Many other SQLite 99 ** interfaces can be used directly without having to send messages to the 100 ** server as long as SQLITE_ENABLE_MEMORY_MANAGEMENT is not defined. 101 ** The following interfaces fall into this second category: 102 ** 103 ** sqlite3_bind_* 104 ** sqlite3_changes 105 ** sqlite3_clear_bindings 106 ** sqlite3_column_* 107 ** sqlite3_complete 108 ** sqlite3_create_collation 109 ** sqlite3_create_function 110 ** sqlite3_data_count 111 ** sqlite3_db_handle 112 ** sqlite3_errcode 113 ** sqlite3_errmsg 114 ** sqlite3_last_insert_rowid 115 ** sqlite3_total_changes 116 ** sqlite3_transfer_bindings 117 ** 118 ** A single SQLite connection (an sqlite3* object) or an SQLite statement 119 ** (an sqlite3_stmt* object) should only be passed to a single interface 120 ** function at a time. The connections and statements can be passed from 121 ** any thread to any of the functions listed in the second group above as 122 ** long as the same connection is not in use by two threads at once and 123 ** as long as SQLITE_ENABLE_MEMORY_MANAGEMENT is not defined. Additional 124 ** information about the SQLITE_ENABLE_MEMORY_MANAGEMENT constraint is 125 ** below. 126 ** 127 ** The busy handler for all database connections should remain turned 128 ** off. That means that any lock contention will cause the associated 129 ** sqlite3_client_step() call to return immediately with an SQLITE_BUSY 130 ** error code. If a busy handler is enabled and lock contention occurs, 131 ** then the entire server thread will block. This will cause not only 132 ** the requesting client to block but every other database client as 133 ** well. It is possible to enhance the code below so that lock 134 ** contention will cause the message to be placed back on the top of 135 ** the queue to be tried again later. But such enhanced processing is 136 ** not included here, in order to keep the example simple. 137 ** 138 ** This example code assumes the use of pthreads. Pthreads 139 ** implementations are available for windows. (See, for example 140 ** http://sourceware.org/pthreads-win32/announcement.html.) Or, you 141 ** can translate the locking and thread synchronization code to use 142 ** windows primitives easily enough. The details are left as an 143 ** exercise to the reader. 144 ** 145 **** Restrictions Associated With SQLITE_ENABLE_MEMORY_MANAGEMENT **** 146 ** 147 ** If you compile with SQLITE_ENABLE_MEMORY_MANAGEMENT defined, then 148 ** SQLite includes code that tracks how much memory is being used by 149 ** each thread. These memory counts can become confused if memory 150 ** is allocated by one thread and then freed by another. For that 151 ** reason, when SQLITE_ENABLE_MEMORY_MANAGEMENT is used, all operations 152 ** that might allocate or free memory should be performanced in the same 153 ** thread that originally created the database connection. In that case, 154 ** many of the operations that are listed above as safe to be performed 155 ** in separate threads would need to be sent over to the server to be 156 ** done there. If SQLITE_ENABLE_MEMORY_MANAGEMENT is defined, then 157 ** the following functions can be used safely from different threads 158 ** without messing up the allocation counts: 159 ** 160 ** sqlite3_bind_parameter_name 161 ** sqlite3_bind_parameter_index 162 ** sqlite3_changes 163 ** sqlite3_column_blob 164 ** sqlite3_column_count 165 ** sqlite3_complete 166 ** sqlite3_data_count 167 ** sqlite3_db_handle 168 ** sqlite3_errcode 169 ** sqlite3_errmsg 170 ** sqlite3_last_insert_rowid 171 ** sqlite3_total_changes 172 ** 173 ** The remaining functions are not thread-safe when memory management 174 ** is enabled. So one would have to define some new interface routines 175 ** along the following lines: 176 ** 177 ** sqlite3_client_bind_* 178 ** sqlite3_client_clear_bindings 179 ** sqlite3_client_column_* 180 ** sqlite3_client_create_collation 181 ** sqlite3_client_create_function 182 ** sqlite3_client_transfer_bindings 183 ** 184 ** The example code in this file is intended for use with memory 185 ** management turned off. So the implementation of these additional 186 ** client interfaces is left as an exercise to the reader. 187 ** 188 ** It may seem surprising to the reader that the list of safe functions 189 ** above does not include things like sqlite3_bind_int() or 190 ** sqlite3_column_int(). But those routines might, in fact, allocate 191 ** or deallocate memory. In the case of sqlite3_bind_int(), if the 192 ** parameter was previously bound to a string that string might need 193 ** to be deallocated before the new integer value is inserted. In 194 ** the case of sqlite3_column_int(), the value of the column might be 195 ** a UTF-16 string which will need to be converted to UTF-8 then into 196 ** an integer. 197 */ 198 199 /* Include this to get the definition of SQLITE_THREADSAFE, in the 200 ** case that default values are used. 201 */ 202 #include "sqliteInt.h" 203 204 /* 205 ** Only compile the code in this file on UNIX with a SQLITE_THREADSAFE build 206 ** and only if the SQLITE_SERVER macro is defined. 207 */ 208 #if defined(SQLITE_SERVER) && !defined(SQLITE_OMIT_SHARED_CACHE) 209 #if SQLITE_OS_UNIX && SQLITE_THREADSAFE 210 211 /* 212 ** We require only pthreads and the public interface of SQLite. 213 */ 214 #include <pthread.h> 215 #include "sqlite3.h" 216 217 /* 218 ** Messages are passed from client to server and back again as 219 ** instances of the following structure. 220 */ 221 typedef struct SqlMessage SqlMessage; 222 struct SqlMessage { 223 int op; /* Opcode for the message */ 224 sqlite3 *pDb; /* The SQLite connection */ 225 sqlite3_stmt *pStmt; /* A specific statement */ 226 int errCode; /* Error code returned */ 227 const char *zIn; /* Input filename or SQL statement */ 228 int nByte; /* Size of the zIn parameter for prepare() */ 229 const char *zOut; /* Tail of the SQL statement */ 230 SqlMessage *pNext; /* Next message in the queue */ 231 SqlMessage *pPrev; /* Previous message in the queue */ 232 pthread_mutex_t clientMutex; /* Hold this mutex to access the message */ 233 pthread_cond_t clientWakeup; /* Signal to wake up the client */ 234 }; 235 236 /* 237 ** Legal values for SqlMessage.op 238 */ 239 #define MSG_Open 1 /* sqlite3_open(zIn, &pDb) */ 240 #define MSG_Prepare 2 /* sqlite3_prepare(pDb, zIn, nByte, &pStmt, &zOut) */ 241 #define MSG_Step 3 /* sqlite3_step(pStmt) */ 242 #define MSG_Reset 4 /* sqlite3_reset(pStmt) */ 243 #define MSG_Finalize 5 /* sqlite3_finalize(pStmt) */ 244 #define MSG_Close 6 /* sqlite3_close(pDb) */ 245 #define MSG_Done 7 /* Server has finished with this message */ 246 247 248 /* 249 ** State information about the server is stored in a static variable 250 ** named "g" as follows: 251 */ 252 static struct ServerState { 253 pthread_mutex_t queueMutex; /* Hold this mutex to access the msg queue */ 254 pthread_mutex_t serverMutex; /* Held by the server while it is running */ 255 pthread_cond_t serverWakeup; /* Signal this condvar to wake up the server */ 256 volatile int serverHalt; /* Server halts itself when true */ 257 SqlMessage *pQueueHead; /* Head of the message queue */ 258 SqlMessage *pQueueTail; /* Tail of the message queue */ 259 } g = { 260 PTHREAD_MUTEX_INITIALIZER, 261 PTHREAD_MUTEX_INITIALIZER, 262 PTHREAD_COND_INITIALIZER, 263 }; 264 265 /* 266 ** Send a message to the server. Block until we get a reply. 267 ** 268 ** The mutex and condition variable in the message are uninitialized 269 ** when this routine is called. This routine takes care of 270 ** initializing them and destroying them when it has finished. 271 */ 272 static void sendToServer(SqlMessage *pMsg){ 273 /* Initialize the mutex and condition variable on the message 274 */ 275 pthread_mutex_init(&pMsg->clientMutex, 0); 276 pthread_cond_init(&pMsg->clientWakeup, 0); 277 278 /* Add the message to the head of the server's message queue. 279 */ 280 pthread_mutex_lock(&g.queueMutex); 281 pMsg->pNext = g.pQueueHead; 282 if( g.pQueueHead==0 ){ 283 g.pQueueTail = pMsg; 284 }else{ 285 g.pQueueHead->pPrev = pMsg; 286 } 287 pMsg->pPrev = 0; 288 g.pQueueHead = pMsg; 289 pthread_mutex_unlock(&g.queueMutex); 290 291 /* Signal the server that the new message has be queued, then 292 ** block waiting for the server to process the message. 293 */ 294 pthread_mutex_lock(&pMsg->clientMutex); 295 pthread_cond_signal(&g.serverWakeup); 296 while( pMsg->op!=MSG_Done ){ 297 pthread_cond_wait(&pMsg->clientWakeup, &pMsg->clientMutex); 298 } 299 pthread_mutex_unlock(&pMsg->clientMutex); 300 301 /* Destroy the mutex and condition variable of the message. 302 */ 303 pthread_mutex_destroy(&pMsg->clientMutex); 304 pthread_cond_destroy(&pMsg->clientWakeup); 305 } 306 307 /* 308 ** The following 6 routines are client-side implementations of the 309 ** core SQLite interfaces: 310 ** 311 ** sqlite3_open 312 ** sqlite3_prepare 313 ** sqlite3_step 314 ** sqlite3_reset 315 ** sqlite3_finalize 316 ** sqlite3_close 317 ** 318 ** Clients should use the following client-side routines instead of 319 ** the core routines above. 320 ** 321 ** sqlite3_client_open 322 ** sqlite3_client_prepare 323 ** sqlite3_client_step 324 ** sqlite3_client_reset 325 ** sqlite3_client_finalize 326 ** sqlite3_client_close 327 ** 328 ** Each of these routines creates a message for the desired operation, 329 ** sends that message to the server, waits for the server to process 330 ** then message and return a response. 331 */ 332 int sqlite3_client_open(const char *zDatabaseName, sqlite3 **ppDb){ 333 SqlMessage msg; 334 msg.op = MSG_Open; 335 msg.zIn = zDatabaseName; 336 sendToServer(&msg); 337 *ppDb = msg.pDb; 338 return msg.errCode; 339 } 340 int sqlite3_client_prepare( 341 sqlite3 *pDb, 342 const char *zSql, 343 int nByte, 344 sqlite3_stmt **ppStmt, 345 const char **pzTail 346 ){ 347 SqlMessage msg; 348 msg.op = MSG_Prepare; 349 msg.pDb = pDb; 350 msg.zIn = zSql; 351 msg.nByte = nByte; 352 sendToServer(&msg); 353 *ppStmt = msg.pStmt; 354 if( pzTail ) *pzTail = msg.zOut; 355 return msg.errCode; 356 } 357 int sqlite3_client_step(sqlite3_stmt *pStmt){ 358 SqlMessage msg; 359 msg.op = MSG_Step; 360 msg.pStmt = pStmt; 361 sendToServer(&msg); 362 return msg.errCode; 363 } 364 int sqlite3_client_reset(sqlite3_stmt *pStmt){ 365 SqlMessage msg; 366 msg.op = MSG_Reset; 367 msg.pStmt = pStmt; 368 sendToServer(&msg); 369 return msg.errCode; 370 } 371 int sqlite3_client_finalize(sqlite3_stmt *pStmt){ 372 SqlMessage msg; 373 msg.op = MSG_Finalize; 374 msg.pStmt = pStmt; 375 sendToServer(&msg); 376 return msg.errCode; 377 } 378 int sqlite3_client_close(sqlite3 *pDb){ 379 SqlMessage msg; 380 msg.op = MSG_Close; 381 msg.pDb = pDb; 382 sendToServer(&msg); 383 return msg.errCode; 384 } 385 386 /* 387 ** This routine implements the server. To start the server, first 388 ** make sure g.serverHalt is false, then create a new detached thread 389 ** on this procedure. See the sqlite3_server_start() routine below 390 ** for an example. This procedure loops until g.serverHalt becomes 391 ** true. 392 */ 393 void *sqlite3_server(void *NotUsed){ 394 if( pthread_mutex_trylock(&g.serverMutex) ){ 395 return 0; /* Another server is already running */ 396 } 397 sqlite3_enable_shared_cache(1); 398 while( !g.serverHalt ){ 399 SqlMessage *pMsg; 400 401 /* Remove the last message from the message queue. 402 */ 403 pthread_mutex_lock(&g.queueMutex); 404 while( g.pQueueTail==0 && g.serverHalt==0 ){ 405 pthread_cond_wait(&g.serverWakeup, &g.queueMutex); 406 } 407 pMsg = g.pQueueTail; 408 if( pMsg ){ 409 if( pMsg->pPrev ){ 410 pMsg->pPrev->pNext = 0; 411 }else{ 412 g.pQueueHead = 0; 413 } 414 g.pQueueTail = pMsg->pPrev; 415 } 416 pthread_mutex_unlock(&g.queueMutex); 417 if( pMsg==0 ) break; 418 419 /* Process the message just removed 420 */ 421 pthread_mutex_lock(&pMsg->clientMutex); 422 switch( pMsg->op ){ 423 case MSG_Open: { 424 pMsg->errCode = sqlite3_open(pMsg->zIn, &pMsg->pDb); 425 break; 426 } 427 case MSG_Prepare: { 428 pMsg->errCode = sqlite3_prepare(pMsg->pDb, pMsg->zIn, pMsg->nByte, 429 &pMsg->pStmt, &pMsg->zOut); 430 break; 431 } 432 case MSG_Step: { 433 pMsg->errCode = sqlite3_step(pMsg->pStmt); 434 break; 435 } 436 case MSG_Reset: { 437 pMsg->errCode = sqlite3_reset(pMsg->pStmt); 438 break; 439 } 440 case MSG_Finalize: { 441 pMsg->errCode = sqlite3_finalize(pMsg->pStmt); 442 break; 443 } 444 case MSG_Close: { 445 pMsg->errCode = sqlite3_close(pMsg->pDb); 446 break; 447 } 448 } 449 450 /* Signal the client that the message has been processed. 451 */ 452 pMsg->op = MSG_Done; 453 pthread_mutex_unlock(&pMsg->clientMutex); 454 pthread_cond_signal(&pMsg->clientWakeup); 455 } 456 pthread_mutex_unlock(&g.serverMutex); 457 return 0; 458 } 459 460 /* 461 ** Start a server thread if one is not already running. If there 462 ** is aleady a server thread running, the new thread will quickly 463 ** die and this routine is effectively a no-op. 464 */ 465 void sqlite3_server_start(void){ 466 pthread_t x; 467 int rc; 468 g.serverHalt = 0; 469 rc = pthread_create(&x, 0, sqlite3_server, 0); 470 if( rc==0 ){ 471 pthread_detach(x); 472 } 473 } 474 475 /* 476 ** If a server thread is running, then stop it. If no server is 477 ** running, this routine is effectively a no-op. 478 ** 479 ** This routine waits until the server has actually stopped before 480 ** returning. 481 */ 482 void sqlite3_server_stop(void){ 483 g.serverHalt = 1; 484 pthread_cond_broadcast(&g.serverWakeup); 485 pthread_mutex_lock(&g.serverMutex); 486 pthread_mutex_unlock(&g.serverMutex); 487 } 488 489 #endif /* SQLITE_OS_UNIX && SQLITE_THREADSAFE */ 490 #endif /* defined(SQLITE_SERVER) */ 491