|
|
@@ -64,26 +64,14 @@ int remove_team_unit(int argc, char *argv[]){
|
|
|
);
|
|
|
return ERROR_INPUT_TEAM_NO_ACTION;
|
|
|
}
|
|
|
- sqlite3 *db;
|
|
|
- if (
|
|
|
- SUCCESS != sqlite3_open_v2(db_location, &db, SQLITE_OPEN_READWRITE, NULL)
|
|
|
- ){
|
|
|
- fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
|
|
- sqlite3_close(db);
|
|
|
- return ERROR_DB_CANT_OPEN;
|
|
|
- }
|
|
|
- char query[200] =
|
|
|
- "SELECT count(unit) AS inc FROM units_teams WHERE team = ? AND unit = ?";
|
|
|
-
|
|
|
+ sqlite3 *db = NULL;
|
|
|
sqlite3_stmt *stmt_verify;
|
|
|
- if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_verify, 0)) {
|
|
|
- fprintf(
|
|
|
- stderr, "Error verifiying units and teams: %s\n", sqlite3_errmsg(db)
|
|
|
- );
|
|
|
- return ERROR_DB_RUNES_SLOT;
|
|
|
- }
|
|
|
- sqlite3_bind_text(stmt_verify, 1, argv[0], strlen(argv[0]), NULL);
|
|
|
- sqlite3_bind_text(stmt_verify, 2, argv[1], strlen(argv[1]), NULL);
|
|
|
+ char *parameters[2] = {argv[0], argv[1]};
|
|
|
+ db_query(
|
|
|
+ &db, &stmt_verify,
|
|
|
+ "SELECT count(unit) AS inc FROM units_teams WHERE team = ? AND unit = ?",
|
|
|
+ parameters
|
|
|
+ );
|
|
|
if (SQLITE_ROW != sqlite3_step(stmt_verify)){
|
|
|
fprintf(
|
|
|
stderr, "Unable to verify unit and team: %s\n", sqlite3_errmsg(db)
|
|
|
@@ -105,37 +93,26 @@ int remove_team_unit(int argc, char *argv[]){
|
|
|
}
|
|
|
sqlite3_finalize(stmt_verify);
|
|
|
|
|
|
- // Delete from units_teams
|
|
|
- sqlite3_stmt *stmt_insert;
|
|
|
- strcpy(query, "DELETE FROM units_teams WHERE team = ? AND unit = ?");
|
|
|
- if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_insert, 0)) {
|
|
|
- fprintf(
|
|
|
- stderr,
|
|
|
- "Failed to prepare statement to delete from units_teams: %s\n",
|
|
|
- sqlite3_errmsg(db)
|
|
|
- );
|
|
|
- sqlite3_finalize(stmt_insert);
|
|
|
- sqlite3_close(db);
|
|
|
- return ERROR_DB_DELETE_UNITS_TEAMS;
|
|
|
- }
|
|
|
- sqlite3_bind_text(stmt_verify, 1, argv[0], strlen(argv[0]), NULL);
|
|
|
- sqlite3_bind_text(stmt_verify, 2, argv[1], strlen(argv[1]), NULL);
|
|
|
- if (SQLITE_DONE != sqlite3_step(stmt_insert)){
|
|
|
+ // Delete from units_teams.
|
|
|
+ if (
|
|
|
+ SUCCESS !=
|
|
|
+ db_execute(
|
|
|
+ &db, "DELETE FROM units_teams WHERE team = ? AND unit = ?", parameters
|
|
|
+ )
|
|
|
+ ){
|
|
|
fprintf(
|
|
|
stderr,
|
|
|
- "Unable to to insert into units_teams: %s\n", sqlite3_errmsg(db)
|
|
|
+ "Unable to remove unit from team: %s\n", sqlite3_errmsg(db)
|
|
|
);
|
|
|
- sqlite3_finalize(stmt_insert);
|
|
|
sqlite3_close(db);
|
|
|
return ERROR_DB_DELETE_UNITS_TEAMS;
|
|
|
}
|
|
|
|
|
|
- // Inform about the newly created team
|
|
|
+ // Inform about the new team ocmposition
|
|
|
printf(
|
|
|
"Unit with ID '%s' succesfully removed from team with id '%s'\n",
|
|
|
argv[1], argv[0]
|
|
|
);
|
|
|
- sqlite3_finalize(stmt_insert);
|
|
|
sqlite3_close(db);
|
|
|
|
|
|
// Show the team composition and end.
|
|
|
@@ -159,31 +136,17 @@ int add_team_unit(int argc, char *argv[]){
|
|
|
);
|
|
|
return ERROR_INPUT_TEAM_NO_ACTION;
|
|
|
}
|
|
|
- sqlite3 *db;
|
|
|
- if (
|
|
|
- SUCCESS != sqlite3_open_v2(db_location, &db, SQLITE_OPEN_READWRITE, NULL)
|
|
|
- ){
|
|
|
- fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
|
|
- sqlite3_close(db);
|
|
|
- return ERROR_DB_CANT_OPEN;
|
|
|
- }
|
|
|
- char query[200] =
|
|
|
+ sqlite3 *db = NULL;
|
|
|
+ sqlite3_stmt *stmt_verify;
|
|
|
+ char *parameters[4] = {argv[0], argv[1], argv[0], argv[1]};
|
|
|
+ db_query(
|
|
|
+ &db, &stmt_verify,
|
|
|
"SELECT "
|
|
|
"(SELECT count(id) FROM teams WHERE id = ?) AS team, "
|
|
|
"(SELECT count(id) FROM units WHERE id = ?) AS unit, "
|
|
|
- "(SELECT count(*) FROM units_teams WHERE team = ? AND unit = ?) AS inc";
|
|
|
-
|
|
|
- sqlite3_stmt *stmt_verify;
|
|
|
- if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_verify, 0)) {
|
|
|
- fprintf(
|
|
|
- stderr, "Error verifiying units and teams: %s\n", sqlite3_errmsg(db)
|
|
|
- );
|
|
|
- return ERROR_DB_RUNES_SLOT;
|
|
|
- }
|
|
|
- sqlite3_bind_text(stmt_verify, 1, argv[0], strlen(argv[0]), NULL);
|
|
|
- sqlite3_bind_text(stmt_verify, 2, argv[1], strlen(argv[1]), NULL);
|
|
|
- sqlite3_bind_text(stmt_verify, 3, argv[0], strlen(argv[0]), NULL);
|
|
|
- sqlite3_bind_text(stmt_verify, 4, argv[1], strlen(argv[1]), NULL);
|
|
|
+ "(SELECT count(*) FROM units_teams WHERE team = ? AND unit = ?) AS inc",
|
|
|
+ parameters
|
|
|
+ );
|
|
|
if (SQLITE_ROW != sqlite3_step(stmt_verify)){
|
|
|
fprintf(
|
|
|
stderr, "Unable to verify unit and team: %s\n", sqlite3_errmsg(db)
|
|
|
@@ -216,26 +179,16 @@ int add_team_unit(int argc, char *argv[]){
|
|
|
sqlite3_finalize(stmt_verify);
|
|
|
|
|
|
// Insert into units_teams
|
|
|
- sqlite3_stmt *stmt_insert;
|
|
|
- strcpy(query, "INSERT INTO units_teams (team, unit) VALUES (?, ?)");
|
|
|
- if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_insert, 0)) {
|
|
|
- fprintf(
|
|
|
- stderr,
|
|
|
- "Failed to prepare statement to insert into units_teams: %s\n",
|
|
|
- sqlite3_errmsg(db)
|
|
|
- );
|
|
|
- sqlite3_finalize(stmt_insert);
|
|
|
- sqlite3_close(db);
|
|
|
- return ERROR_DB_INSERT_UNITS_TEAMS;
|
|
|
- }
|
|
|
- sqlite3_bind_text(stmt_verify, 1, argv[0], strlen(argv[0]), NULL);
|
|
|
- sqlite3_bind_text(stmt_verify, 2, argv[1], strlen(argv[1]), NULL);
|
|
|
- if (SQLITE_DONE != sqlite3_step(stmt_insert)){
|
|
|
+ if (
|
|
|
+ SUCCESS !=
|
|
|
+ db_execute(
|
|
|
+ &db, "INSERT INTO units_teams (team, unit) VALUES (?, ?)", parameters
|
|
|
+ )
|
|
|
+ ){
|
|
|
fprintf(
|
|
|
stderr,
|
|
|
- "Unable to to insert into units_teams: %s\n", sqlite3_errmsg(db)
|
|
|
+ "Unable to add unit to team: %s\n", sqlite3_errmsg(db)
|
|
|
);
|
|
|
- sqlite3_finalize(stmt_insert);
|
|
|
sqlite3_close(db);
|
|
|
return ERROR_DB_INSERT_UNITS_TEAMS;
|
|
|
}
|
|
|
@@ -245,7 +198,6 @@ int add_team_unit(int argc, char *argv[]){
|
|
|
"Unit with ID '%s' succesfully added to team with id '%s'\n",
|
|
|
argv[1], argv[0]
|
|
|
);
|
|
|
- sqlite3_finalize(stmt_insert);
|
|
|
sqlite3_close(db);
|
|
|
|
|
|
// Show the team composition and end.
|
|
|
@@ -271,29 +223,18 @@ int list_team(int argc, char *argv[]){
|
|
|
show_units = TRUE;
|
|
|
}
|
|
|
}
|
|
|
- char id[8] = "\0";
|
|
|
+
|
|
|
char query[300] = "SELECT id, name, priority FROM teams ";
|
|
|
- char tmp[64];
|
|
|
+ char *parameters[] = {"", ""};
|
|
|
if (argc > number_of_options){
|
|
|
- strcpy(id, argv[0]);
|
|
|
- strcpy(tmp, "");
|
|
|
- sprintf(tmp, "WHERE id = '%s' OR name = '%s' ", id, id);
|
|
|
- strcat(query, tmp);
|
|
|
+ strcat(query, "WHERE id = ? OR name = ?");
|
|
|
+ parameters[0] = argv[0];
|
|
|
+ parameters[1] = argv[0];
|
|
|
}
|
|
|
strcat(query, " ORDER BY priority DESC");
|
|
|
- sqlite3 *db;
|
|
|
- if (
|
|
|
- SUCCESS != sqlite3_open_v2(db_location, &db, SQLITE_OPEN_READWRITE, NULL)
|
|
|
- ){
|
|
|
- fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
|
|
- sqlite3_close(db);
|
|
|
- return ERROR_DB_CANT_OPEN;
|
|
|
- }
|
|
|
+ sqlite3 *db = NULL;
|
|
|
sqlite3_stmt *stmt_teams;
|
|
|
- if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_teams, 0)) {
|
|
|
- fprintf(stderr, "Error getting teams: %s\n", sqlite3_errmsg(db));
|
|
|
- return ERROR_DB_TEAM_ID;
|
|
|
- }
|
|
|
+ db_query(&db, &stmt_teams, query, parameters);
|
|
|
|
|
|
printf(" --------------------------------------------------\n");
|
|
|
printf(" | ID | Name | Prio |\n");
|
|
|
@@ -331,6 +272,7 @@ int list_team(int argc, char *argv[]){
|
|
|
strlen(sqlite3_column_text(stmt_teams, 0)), NULL
|
|
|
);
|
|
|
printf(" | |----------------------------------| |\n");
|
|
|
+ char tmp[64];
|
|
|
while (SQLITE_ROW == sqlite3_step(stmt_units)){
|
|
|
strcpy(tmp, sqlite3_column_text(stmt_units, 1));
|
|
|
if (strlen(tmp) > 9){
|
|
|
@@ -394,69 +336,54 @@ int create_team(int argc, char *argv[]){
|
|
|
return ERROR_INPUT_TEAM_CREATE_PRIORITY;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
// Read name
|
|
|
char name[128];
|
|
|
strcpy(name, argv[0]);
|
|
|
-
|
|
|
int new_id = -1;
|
|
|
-
|
|
|
- // Connect to the db.
|
|
|
- sqlite3 *db;
|
|
|
- if (SUCCESS != sqlite3_open_v2(db_location, &db, SQLITE_OPEN_READWRITE, NULL)){
|
|
|
- fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
|
|
- sqlite3_close(db);
|
|
|
- return ERROR_DB_CANT_OPEN;
|
|
|
- }
|
|
|
+ sqlite3 *db = NULL;
|
|
|
+ sqlite3_stmt *stmt_id;
|
|
|
|
|
|
// Get the new id for the team
|
|
|
- char sql[512];
|
|
|
- strcpy(sql, "SELECT max(CAST(id AS INTEGER)) + 1 AS id FROM teams;");
|
|
|
- sqlite3_stmt *res;
|
|
|
- if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
|
|
|
- fprintf(
|
|
|
- stderr,
|
|
|
- "Failed to execute statement to select new team ID: %s\n",
|
|
|
- sqlite3_errmsg(db)
|
|
|
- );
|
|
|
- sqlite3_finalize(res);
|
|
|
- sqlite3_close(db);
|
|
|
- return ERROR_DB_TEAM_ID;
|
|
|
- }
|
|
|
- if (SQLITE_ROW != sqlite3_step(res)){
|
|
|
+ db_query(
|
|
|
+ &db, &stmt_id,
|
|
|
+ "SELECT max(CAST(id AS INTEGER)) + 1 AS id FROM teams;",
|
|
|
+ NULL
|
|
|
+ );
|
|
|
+ if (SQLITE_ROW != sqlite3_step(stmt_id)){
|
|
|
fprintf(stderr, "Unable to read teams: %s\n", sqlite3_errmsg(db));
|
|
|
- sqlite3_finalize(res);
|
|
|
+ sqlite3_finalize(stmt_id);
|
|
|
sqlite3_close(db);
|
|
|
return ERROR_DB_NEW_TEAM_ID;
|
|
|
}
|
|
|
- new_id = sqlite3_column_int(res, 0);
|
|
|
|
|
|
- // Insert the row.
|
|
|
- strcpy(sql, "INSERT INTO teams (id, name, priority) VALUES (?, ?, ?)");
|
|
|
- if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
|
|
|
+ // Get all parameters and convert to char.
|
|
|
+ new_id = sqlite3_column_int(stmt_id, 0);
|
|
|
+ sqlite3_finalize(stmt_id);
|
|
|
+ char priority_c[2];
|
|
|
+ char id_c[4];
|
|
|
+ sprintf(id_c, "%d", new_id);
|
|
|
+ sprintf(priority_c, "%d", priority);
|
|
|
+ char *parameters[3] = {id_c, argv[0], priority_c};
|
|
|
+
|
|
|
+ // Insert into teams
|
|
|
+ if (
|
|
|
+ SUCCESS !=
|
|
|
+ db_execute(
|
|
|
+ &db,
|
|
|
+ "INSERT INTO teams (id, name, priority) VALUES (?, ?, ?)", parameters
|
|
|
+ )
|
|
|
+ ){
|
|
|
fprintf(
|
|
|
stderr,
|
|
|
- "Failed to execute statement to create team: %s\n",
|
|
|
- sqlite3_errmsg(db)
|
|
|
+ "Unable to create team: %s\n", sqlite3_errmsg(db)
|
|
|
);
|
|
|
- sqlite3_finalize(res);
|
|
|
- sqlite3_close(db);
|
|
|
- return ERROR_DB_TEAM_ID;
|
|
|
- }
|
|
|
- sqlite3_bind_int(res, 1, new_id);
|
|
|
- sqlite3_bind_text(res, 2, name, strlen(name), NULL);
|
|
|
- sqlite3_bind_int(res, 3, priority);
|
|
|
- if (SQLITE_DONE != sqlite3_step(res)){
|
|
|
- fprintf(stderr, "Unable to create team: %s\n", sqlite3_errmsg(db));
|
|
|
- sqlite3_finalize(res);
|
|
|
sqlite3_close(db);
|
|
|
- return ERROR_DB_NEW_TEAM_ID;
|
|
|
+ return ERROR_DB_INSERT_TEAMS;
|
|
|
}
|
|
|
|
|
|
// Inform about the newly created team
|
|
|
- printf("Team ID %d '%s' created with priority %d\n", new_id, name, priority);
|
|
|
- sqlite3_finalize(res);
|
|
|
sqlite3_close(db);
|
|
|
+ printf("Team ID %d '%s' created with priority %d\n", new_id, name, priority);
|
|
|
return SUCCESS;
|
|
|
}
|
|
|
|
|
|
@@ -475,25 +402,15 @@ int delete_team(int argc, char *argv[]){
|
|
|
);
|
|
|
return ERROR_INPUT_TEAM_DELETE_ARGUMENT_COUNT;
|
|
|
}
|
|
|
+ sqlite3 *db = NULL;
|
|
|
|
|
|
- // Open database
|
|
|
- sqlite3 *db;
|
|
|
- if (
|
|
|
- SUCCESS != sqlite3_open_v2(db_location, &db, SQLITE_OPEN_READWRITE, NULL)
|
|
|
- ){
|
|
|
- fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
|
|
|
- sqlite3_close(db);
|
|
|
- return ERROR_DB_CANT_OPEN;
|
|
|
- }
|
|
|
- char query[200] = "SELECT count(id) AS c FROM teams WHERE id = ?";
|
|
|
+ // Verify that the team exists.
|
|
|
sqlite3_stmt *stmt_verify;
|
|
|
- if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_verify, 0)) {
|
|
|
- fprintf(
|
|
|
- stderr, "Error verifiying team: %s\n", sqlite3_errmsg(db)
|
|
|
- );
|
|
|
- return ERROR_DB_TEAM_ID;
|
|
|
- }
|
|
|
- sqlite3_bind_text(stmt_verify, 1, argv[0], strlen(argv[0]), NULL);
|
|
|
+ char *parameters[1] = {argv[0]};
|
|
|
+ db_query(
|
|
|
+ &db, &stmt_verify,
|
|
|
+ "SELECT count(id) AS c FROM teams WHERE id = ?", parameters
|
|
|
+ );
|
|
|
if (SQLITE_ROW != sqlite3_step(stmt_verify)){
|
|
|
fprintf(
|
|
|
stderr, "Unable to verify team: %s\n", sqlite3_errmsg(db)
|
|
|
@@ -510,57 +427,31 @@ int delete_team(int argc, char *argv[]){
|
|
|
}
|
|
|
sqlite3_finalize(stmt_verify);
|
|
|
|
|
|
- // Delete from teams
|
|
|
- sqlite3_stmt *stmt_delete;
|
|
|
- strcpy(query, "DELETE FROM teams WHERE id = ?");
|
|
|
- if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_delete, 0)) {
|
|
|
- fprintf(
|
|
|
- stderr,
|
|
|
- "Failed to prepare statement to delete from teams: %s\n",
|
|
|
- sqlite3_errmsg(db)
|
|
|
- );
|
|
|
- sqlite3_finalize(stmt_delete);
|
|
|
- sqlite3_close(db);
|
|
|
- return ERROR_DB_DELETE_TEAMS;
|
|
|
- }
|
|
|
- sqlite3_bind_text(stmt_delete, 1, argv[0], strlen(argv[0]), NULL);
|
|
|
- if (SQLITE_DONE != sqlite3_step(stmt_delete)){
|
|
|
+ // Delete from table teams.
|
|
|
+ if (
|
|
|
+ SUCCESS !=
|
|
|
+ db_execute(&db, "DELETE FROM teams WHERE id = ?", parameters)
|
|
|
+ ){
|
|
|
fprintf(
|
|
|
stderr,
|
|
|
- "Unable to to delete from units_teams: %s\n", sqlite3_errmsg(db)
|
|
|
+ "Unable to delete team: %s\n", sqlite3_errmsg(db)
|
|
|
);
|
|
|
- sqlite3_finalize(stmt_delete);
|
|
|
sqlite3_close(db);
|
|
|
return ERROR_DB_DELETE_TEAMS;
|
|
|
}
|
|
|
- sqlite3_finalize(stmt_delete);
|
|
|
|
|
|
- // Delete from unit_teams
|
|
|
- strcpy(query, "DELETE FROM units_teams WHERE team = ?");
|
|
|
- if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_delete, 0)) {
|
|
|
- fprintf(
|
|
|
- stderr,
|
|
|
- "Failed to prepare statement to delete from units_teams: %s\n",
|
|
|
- sqlite3_errmsg(db)
|
|
|
- );
|
|
|
- sqlite3_finalize(stmt_delete);
|
|
|
- sqlite3_close(db);
|
|
|
- return ERROR_DB_DELETE_TEAMS;
|
|
|
- }
|
|
|
- sqlite3_bind_text(stmt_delete, 1, argv[0], strlen(argv[0]), NULL);
|
|
|
- if (SQLITE_DONE != sqlite3_step(stmt_delete)){
|
|
|
+ // Delete from table units_teams.
|
|
|
+ if (
|
|
|
+ SUCCESS !=
|
|
|
+ db_execute(&db, "DELETE FROM units_teams WHERE id = ?", parameters)
|
|
|
+ ){
|
|
|
fprintf(
|
|
|
stderr,
|
|
|
- "Unable to to delete from units_teams: %s\n", sqlite3_errmsg(db)
|
|
|
+ "Unable to delete units in team: %s\n", sqlite3_errmsg(db)
|
|
|
);
|
|
|
- sqlite3_finalize(stmt_delete);
|
|
|
sqlite3_close(db);
|
|
|
- return ERROR_DB_DELETE_TEAMS;
|
|
|
+ return ERROR_DB_DELETE_UNITS_TEAMS;
|
|
|
}
|
|
|
-
|
|
|
- // Inform about the deleted team
|
|
|
- printf("Team with ID '%s' deleted\n", argv[0]);
|
|
|
- sqlite3_finalize(stmt_delete);
|
|
|
sqlite3_close(db);
|
|
|
return SUCCESS;
|
|
|
}
|