Разработка информационно-поисковой системы, страница 6

            int *pos = (int*)param->buf;

            save_str (table[tables][*pos].name, azArg[1]);

            table[tables][*pos].type = (COLUMN_TYPE)atoi(azArg[2]);

            table[tables][*pos].width = atoi(azArg[3]);

            table[tables][*pos].ref_tid = atoi(azArg[4]) - 1;

            if (table[tables][*pos].type != CT_COMBO_EX)

                  table[tables][*pos].ref_cid = atoi(azArg[5]) - 1;

            else

                  table[tables][*pos].ref_cid = atoi(azArg[5]);

            ++*pos;

            break;

      }

      default:

            error_msg ("callback_proc() failed ! unknown mode !");

      }

      return 0;

}

int exec_sql_cmd (const char * cmd, callback_param_t * param)

{

      if (param && param->mode & MODE_DEBUG)

      {

            char * msg;

            param->mode ^= MODE_DEBUG;

            int rc = sqlite3_exec (sql_db, cmd, (sqlite3_callback)callback_proc, param, &msg);

            if (rc)

            {    

                  error_msg (msg);

                  free (msg);

            }

            return rc;

      }

      else

            return sqlite3_exec (sql_db, cmd, (sqlite3_callback)callback_proc, param, NULL);

}

/* инициализация базы данных - SQLite 3.3.5 */

int db_init()

{

    int res = sqlite3_open ("MetaDB.db", &sql_db);

      if (res == SQLITE_OK)

      {

            res = exec_sql_cmd ("CREATE TABLE tables"

                  "(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE,"

                  "x1 INTEGER DEFAULT 0, y1 INTEGER DEFAULT 0,"

                  "x2 INTEGER DEFAULT 0, y2 INTEGER DEFAULT 0)", NULL);

            column_t table1[] =

            {

                  {"ID",            CT_CONST, 30,  0, 0},

                  {"Компания", CT_TEXT,  100, 0, 0},

                  {"Адрес",   CT_TEXT,  200, 0, 0}

            };

            create_table("Компании", ASIZE(table1), table1);

            column_t table2[] =

            {

                  {"ID",               CT_CONST, 30,  0, 0},

                  {"Имя сокета", CT_TEXT,  100, 0, 0}

            };

            create_table("Проц. разъемы (sockets)", ASIZE(table2), table2);

            column_t table3[] =

            {

                  {"ID",              CT_CONST, 30,  0, 0},

                  {"Компания",  CT_COMBO, 100, 1, 2},

                  {"Имя",             CT_TEXT,  100, 0, 0},

                  {"Сокет",     CT_COMBO, 100, 2, 2},

                  {"Частота",   CT_TEXT,  75,  0, 0},

                  {"Цена",      CT_TEXT,  50,  0, 0}

            };

            create_table("Процессоры", ASIZE(table3), table3);

            column_t table4[] =

            {

                  {"ID",              CT_CONST, 30,  0, 0},

                  {"Компания",  CT_COMBO, 100, 1, 2},

                  {"Объем",     CT_TEXT,  75,  0, 0},

                  {"Цена",      CT_TEXT,  50,  0, 0}

            };

            create_table("Оперативная память", ASIZE(table4), table4);

            column_t table5[] =

            {

                  {"ID",              CT_CONST, 30,  0, 0},

                  {"Компания",  CT_COMBO, 100, 1, 2},

                  {"Имя",             CT_TEXT,  100, 0, 0},

                  {"Сокет",     CT_COMBO, 100, 2, 2},

                  {"Цена",      CT_TEXT,  50,  0, 0}

            };

            create_table("Материнские платы", ASIZE(table5), table5);

            column_t table6[] =

            {

                  {"ID",              CT_CONST, 30,  0, 0},

                  {"Компания",  CT_COMBO, 100, 1, 2},

                  {"Объем",     CT_TEXT,  75,  0, 0},

                  {"Цена",      CT_TEXT,  50,  0, 0}

            };

            create_table("Жесткие диски", ASIZE(table6), table6);