Main Page | Modules | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

switch_core_sqldb.c File Reference


Defines

#define SQLLEN   1024 * 64

Functions

switch_status_t switch_core_db_persistant_execute (switch_core_db_t *db, char *sql, uint32_t retries)
 Execute a sql stmt until it is accepted.
void switch_core_sqldb_start (switch_memory_pool_t *pool)
void switch_core_sqldb_stop (void)


Define Documentation

#define SQLLEN   1024 * 64
 


Function Documentation

void switch_core_sqldb_start switch_memory_pool_t pool  ) 
 

00369 {
00370         switch_thread_t *thread;
00371         switch_threadattr_t *thd_attr;;
00372 
00373         sql_manager.memory_pool = pool;
00374 
00375         /* Activate SQL database */
00376         if ((sql_manager.db = switch_core_db_handle()) == 0) {
00377                 switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Opening DB!\n");
00378                 switch_clear_flag((&runtime), SCF_USE_SQL);
00379         } else {
00380                 char create_complete_sql[] =
00381                         "CREATE TABLE complete (\n"
00382                         "   sticky  INTEGER,\n" 
00383                         "   a1  VARCHAR(255),\n" 
00384                         "   a2  VARCHAR(255),\n" 
00385                         "   a3  VARCHAR(255),\n" 
00386                         "   a4  VARCHAR(255),\n" 
00387                         "   a5  VARCHAR(255),\n" 
00388                         "   a6  VARCHAR(255),\n" 
00389                         "   a7  VARCHAR(255),\n" 
00390                         "   a8  VARCHAR(255),\n" 
00391                         "   a9  VARCHAR(255),\n" 
00392                         "   a10 VARCHAR(255)\n" 
00393                         ");\n";
00394 
00395                 char create_alias_sql[] =
00396                         "CREATE TABLE aliases (\n"
00397                         "   sticky  INTEGER,\n" 
00398                         "   alias  VARCHAR(255),\n" 
00399                         "   command  VARCHAR(255)\n" 
00400                         ");\n";
00401 
00402                 char create_channels_sql[] =
00403                         "CREATE TABLE channels (\n"
00404                         "   uuid  VARCHAR(255),\n"
00405                         "   created  VARCHAR(255),\n"
00406                         "   created_epoch  INTEGER,\n"
00407                         "   name  VARCHAR(255),\n"
00408                         "   state  VARCHAR(255),\n"
00409                         "   cid_name  VARCHAR(255),\n"
00410                         "   cid_num  VARCHAR(255),\n"
00411                         "   ip_addr  VARCHAR(255),\n"
00412                         "   dest  VARCHAR(255),\n"
00413                         "   application  VARCHAR(255),\n"
00414                         "   application_data  VARCHAR(255),\n"
00415                         "   dialplan VARCHAR(255),\n"
00416                         "   context VARCHAR(255),\n"
00417                         "   read_codec  VARCHAR(255),\n" 
00418                         "   read_rate  VARCHAR(255),\n" 
00419                         "   write_codec  VARCHAR(255),\n" 
00420                         "   write_rate  VARCHAR(255)\n" 
00421                         ");\n";
00422                 char create_calls_sql[] =
00423                         "CREATE TABLE calls (\n"
00424                         "   function  VARCHAR(255),\n"
00425                         "   created  VARCHAR(255),\n"
00426                         "   created_epoch  INTEGER,\n"
00427                         "   caller_cid_name  VARCHAR(255),\n"
00428                         "   caller_cid_num   VARCHAR(255),\n"
00429                         "   caller_dest_num  VARCHAR(255),\n"
00430                         "   caller_chan_name VARCHAR(255),\n"
00431                         "   caller_uuid      VARCHAR(255),\n"
00432                         "   callee_cid_name  VARCHAR(255),\n"
00433                         "   callee_cid_num   VARCHAR(255),\n"
00434                         "   callee_dest_num  VARCHAR(255),\n" 
00435                         "   callee_chan_name VARCHAR(255),\n" 
00436                         "   callee_uuid      VARCHAR(255)\n" 
00437                         ");\n";
00438                 char create_interfaces_sql[] =
00439                         "CREATE TABLE interfaces (\n"
00440                         "   type             VARCHAR(255),\n"
00441                         "   name             VARCHAR(255),\n" 
00442                         "   description      VARCHAR(255),\n" 
00443                         "   syntax           VARCHAR(255)\n" 
00444                         ");\n";
00445                 char create_tasks_sql[] =
00446                         "CREATE TABLE tasks (\n"
00447                         "   task_id             INTEGER(4),\n"
00448                         "   task_desc           VARCHAR(255),\n" 
00449                         "   task_group          VARCHAR(255),\n" 
00450                         "   task_sql_manager    INTEGER(8)\n" 
00451                         ");\n";
00452 
00453                 switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Opening DB\n");
00454                 switch_core_db_exec(sql_manager.db, "drop table channels", NULL, NULL, NULL);
00455                 switch_core_db_exec(sql_manager.db, "drop table calls", NULL, NULL, NULL);
00456                 switch_core_db_exec(sql_manager.db, "drop table interfaces", NULL, NULL, NULL);
00457                 switch_core_db_exec(sql_manager.db, "drop table tasks", NULL, NULL, NULL);
00458                 switch_core_db_exec(sql_manager.db, "PRAGMA synchronous=OFF;", NULL, NULL, NULL);
00459                 switch_core_db_exec(sql_manager.db, "PRAGMA count_changes=OFF;", NULL, NULL, NULL);
00460                 switch_core_db_exec(sql_manager.db, "PRAGMA cache_size=8000", NULL, NULL, NULL);
00461                 switch_core_db_exec(sql_manager.db, "PRAGMA temp_store=MEMORY;", NULL, NULL, NULL);
00462 
00463                 switch_core_db_test_reactive(sql_manager.db, "select sticky from complete", "DROP TABLE complete", create_complete_sql);
00464                 switch_core_db_test_reactive(sql_manager.db, "select sticky from aliases", "DROP TABLE aliases", create_alias_sql);
00465                 switch_core_db_exec(sql_manager.db, "delete from complete where sticky=0", NULL, NULL, NULL);
00466                 switch_core_db_exec(sql_manager.db, "delete from aliases where sticky=0", NULL, NULL, NULL);
00467                 switch_core_db_exec(sql_manager.db, create_channels_sql, NULL, NULL, NULL);
00468                 switch_core_db_exec(sql_manager.db, create_calls_sql, NULL, NULL, NULL);
00469                 switch_core_db_exec(sql_manager.db, create_interfaces_sql, NULL, NULL, NULL);
00470                 switch_core_db_exec(sql_manager.db, create_tasks_sql, NULL, NULL, NULL);
00471                 if (switch_event_bind("core_db", SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, core_event_handler, NULL) != SWITCH_STATUS_SUCCESS) {
00472                         switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind event handler!\n");
00473                 }
00474         }
00475 
00476         switch_queue_create(&sql_manager.sql_queue, SWITCH_SQL_QUEUE_LEN, sql_manager.memory_pool);
00477         
00478         switch_threadattr_create(&thd_attr, sql_manager.memory_pool);
00479         switch_threadattr_detach_set(thd_attr, 1);
00480         switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE);
00481         switch_thread_create(&thread, thd_attr, switch_core_sql_thread, NULL, sql_manager.memory_pool);
00482         while (!sql_manager.thread_running) {
00483                 switch_yield(10000);
00484         }
00485 }

Here is the call graph for this function:

void switch_core_sqldb_stop void   ) 
 

00488 {
00489         switch_queue_push(sql_manager.sql_queue, NULL);
00490 
00491         switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Waiting for unfinished SQL transactions\n");
00492         while (switch_queue_size(sql_manager.sql_queue) > 0) {
00493                 switch_yield(10000);
00494         }
00495 
00496         switch_core_db_close(sql_manager.db);
00497         switch_core_db_close(sql_manager.event_db);
00498 
00499 }

Here is the call graph for this function:


Variable Documentation

switch_core_db_t* db
 

switch_core_db_t* event_db
 

switch_memory_pool_t* memory_pool
 

switch_queue_t* sql_queue
 

int thread_running
 


Generated on Mon May 26 22:06:52 2008 for FreeSWITCH by  doxygen 1.3.9.1