00369 {
00370 switch_thread_t *thread;
00371 switch_threadattr_t *thd_attr;;
00372
00373 sql_manager.memory_pool = pool;
00374
00375
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 }