void test_database_init() { scheduler_t* scheduler; PGresult* db_result; GString* sql; scheduler = scheduler_init(testdb, NULL); database_init(scheduler); FO_ASSERT_PTR_NOT_NULL(scheduler->db_conn); sprintf(sqltmp, check_scheduler_tables, PQdb(scheduler->db_conn)); sql = g_string_new(sqltmp); g_string_append(sql, "'users';"); /* get the url for the fossology instance */ db_result = database_exec(scheduler, sql->str); //printf("sql: %s\n", sql->str); // TODO skip this test since the order reported here is random, also it will crash if PQntuples < 5 #if 0 if(PQresultStatus(db_result) == PGRES_TUPLES_OK && PQntuples(db_result) != 0) { //printf("result: %s\n", g_strdup(PQgetvalue(db_result, 0, 0))); FO_ASSERT_STRING_EQUAL(g_strdup(PQgetvalue(db_result, 0, 0)), "user_pk"); FO_ASSERT_STRING_EQUAL(g_strdup(PQgetvalue(db_result, 1, 0)), "user_name"); FO_ASSERT_STRING_EQUAL(g_strdup(PQgetvalue(db_result, 2, 0)), "root_folder_fk"); FO_ASSERT_STRING_EQUAL(g_strdup(PQgetvalue(db_result, 3, 0)), "user_desc"); FO_ASSERT_STRING_EQUAL(g_strdup(PQgetvalue(db_result, 4, 0)), "user_seed"); } #endif PQclear(db_result); g_string_free(sql, TRUE); scheduler_destroy(scheduler); }
void test_database_update_event() { scheduler_t* scheduler; char sql[512]; PGresult* db_result; scheduler = scheduler_init(testdb, NULL); FO_ASSERT_PTR_NULL(scheduler->db_conn); database_init(scheduler); FO_ASSERT_PTR_NOT_NULL(scheduler->db_conn); Prepare_Testing_Data(scheduler); database_update_event(scheduler, NULL); sprintf(sql, "SELECT * FROM job;"); db_result = database_exec(scheduler, sql); //printf("result: %s", PQget(db_result, 0, "job_name")); if(PQresultStatus(db_result) == PGRES_TUPLES_OK && PQntuples(db_result) != 0) { FO_ASSERT_STRING_EQUAL(PQget(db_result, 0, "job_name"), "testing file"); FO_ASSERT_EQUAL(atoi(PQget(db_result, 0, "job_user_fk")), 1); } PQclear(db_result); database_reset_queue(scheduler); scheduler_destroy(scheduler); }
bool record_delete(database_handler_t* handler, const char* tablename, int64_t id) { char buf[960]; snprintf(buf, sizeof(buf), "DELETE FROM `%s` WHERE id=%ld", tablename, id); if (!database_prepare(handler, buf)) { return false; } if (!database_exec(handler)) { return false; } return true; }
bool table_delete(database_handler_t* handler, const char* tablename) { char buf[960]; snprintf(buf, sizeof(buf), "DROP TABLE IF EXISTS `%s`", tablename); if (!database_prepare(handler, buf)) { return false; } if (!database_exec(handler)) { return false; } return true; }
bool table_create(database_handler_t* handler, const char* tablename) { char buf[960]; snprintf(buf, sizeof(buf), "CREATE TABLE IF NOT EXISTS `%s` (`id` bigint unsigned NOT NULL, `data` longblob NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8", tablename); if (!database_prepare(handler, buf)) { return false; } if (!database_exec(handler)) { return false; } return true; }
bool record_create(database_handler_t* handler, const char* tablename, int64_t id, const void* data, size_t len) { char buf[960]; MYSQL_BIND param[1]; unsigned long lengths[1] = {len}; snprintf(buf, sizeof(buf), "INSERT INTO `%s`(id, data) VALUES(%ld, ?)", tablename, id); if (!database_prepare(handler, buf)) { return false; } memset(param, 0, sizeof(param)); param[0].buffer_type = MYSQL_TYPE_LONG_BLOB; param[0].buffer = (void*)data; param[0].length = &lengths[0]; if (!database_bind_param(handler, param)) { return false; } if (!database_exec(handler)) { return false; } return true; }
bool record_update(database_handler_t* handler, const char* tablename, int64_t id, const void* data, size_t len) { char buf[960]; MYSQL_BIND param[1]; unsigned long lengths[1] = {len}; snprintf(buf, sizeof(buf), "UPDATE `%s` SET data=? WHERE id=%ld", tablename, id); if (!database_prepare(handler, buf)) { return false; } memset(param, 0, sizeof(param)); param[0].buffer_type = MYSQL_TYPE_LONG_BLOB; param[0].buffer = (void*)data; param[0].length = &lengths[0]; if (!database_bind_param(handler, param)) { return false; } if (!database_exec(handler)) { return false; } /*size = lengths[0];*/ return true; }
bool record_select(database_handler_t* handler, const char* tablename, int64_t id, void* data, size_t* len) { char buf[960]; MYSQL_BIND result[1]; unsigned long lengths[1] = {0}; snprintf(buf, sizeof(buf), "SELECT data FROM `%s` where id=%ld", tablename, id); if (!database_prepare(handler, buf)) { return false; } if (!database_exec(handler)) { return false; } memset(result, 0, sizeof(result)); result[0].buffer_type = MYSQL_TYPE_LONG_BLOB; result[0].buffer = (void*)data; result[0].buffer_length = *len; result[0].length = &lengths[0]; if (!database_bind_result(handler, result)) { return false; } if (!database_fetch(handler)) { return false; } if (!database_free_result(handler)) { return false; } *len = lengths[0]; return true; }
/** * Local function for testing data prepare */ int Prepare_Testing_Data_Scheduler(scheduler_t * scheduler) { char sql[512]; int upload_pk, job_pk, jq_pk; PGresult* db_result; sprintf(sql, "INSERT INTO upload (upload_desc,upload_filename,user_fk,upload_mode,upload_origin) VALUES('testing upload data', 'testing file', '1', '100', 'testing file')"); database_exec(scheduler, sql); /* get upload_pk of just added upload */ sprintf(sql, "SELECT currval('upload_upload_pk_seq') as mykey FROM %s", "upload"); db_result = database_exec(scheduler, sql); upload_pk = atoi(PQget(db_result, 0, "mykey")); PQclear(db_result); /* Add the upload record to the folder */ sprintf(sql, "INSERT INTO foldercontents (parent_fk,foldercontents_mode,child_id) VALUES ('1',2,'%d')", upload_pk); database_exec(scheduler, sql); /* Add the job info */ sprintf(sql, "INSERT INTO job (job_user_fk,job_queued,job_priority,job_name,job_upload_fk) VALUES('1',now(),'0','testing file',%d)", upload_pk); database_exec(scheduler, sql); /* get job_pk of just added upload */ sprintf(sql, "SELECT currval('job_job_pk_seq') as mykey FROM %s", "job"); db_result = database_exec(scheduler, sql); job_pk = atoi(PQget(db_result, 0, "mykey")); PQclear(db_result); sprintf(sql, "INSERT INTO jobqueue (jq_job_fk,jq_type,jq_args,jq_runonpfile,jq_starttime,jq_endtime,jq_end_bits,jq_host) VALUES ('%d', 'ununpack', '%d', NULL, NULL, NULL, 0, NULL)", job_pk, upload_pk); database_exec(scheduler, sql); sprintf(sql, "SELECT currval('jobqueue_jq_pk_seq') as mykey FROM %s", "jobqueue"); db_result = database_exec(scheduler, sql); jq_pk = atoi(PQget(db_result, 0, "mykey")); PQclear(db_result); return(jq_pk); }