From 41ae06e19aa186979afd6e4321bd6fc3a1b3ba0d Mon Sep 17 00:00:00 2001 From: kdeng00 Date: Tue, 12 Nov 2019 22:51:07 -0500 Subject: [PATCH] Fixed bug when song upload HTTP endpoint returns a response of the uploading song with errors --- include/database/SongRepository.h | 2 +- src/database/SongRepository.cpp | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/include/database/SongRepository.h b/include/database/SongRepository.h index 946bd9e..5e214d2 100644 --- a/include/database/SongRepository.h +++ b/include/database/SongRepository.h @@ -20,7 +20,7 @@ namespace database std::vector retrieveRecords(); - model::Song retrieveRecord(model::Song&, type::SongFilter); + model::Song retrieveRecord(const model::Song&, type::SongFilter); bool doesSongExist(const model::Song&, type::SongFilter); bool deleteRecord(const model::Song&); diff --git a/src/database/SongRepository.cpp b/src/database/SongRepository.cpp index 680094a..1b67785 100644 --- a/src/database/SongRepository.cpp +++ b/src/database/SongRepository.cpp @@ -34,7 +34,7 @@ std::vector SongRepository::retrieveRecords() } -model::Song SongRepository::retrieveRecord(model::Song& song, type::SongFilter filter) +model::Song SongRepository::retrieveRecord(const model::Song& song, type::SongFilter filter) { std::stringstream qry; auto conn = setupMysqlConnection(); @@ -59,7 +59,7 @@ model::Song SongRepository::retrieveRecord(model::Song& song, type::SongFilter f auto artistLength = song.artist.size(); switch (filter) { case type::SongFilter::id: - qry << "SongId = ?"; + qry << "sng.SongId = ?"; params[0].buffer_type = MYSQL_TYPE_LONG; params[0].buffer = (char*)&song.id; @@ -67,7 +67,7 @@ model::Song SongRepository::retrieveRecord(model::Song& song, type::SongFilter f params[0].is_null = 0;; break; case type::SongFilter::title: - qry << "Title = ?"; + qry << "sng.Title = ?"; params[0].buffer_type = MYSQL_TYPE_STRING; params[0].buffer = (char*)song.title.c_str(); @@ -75,7 +75,7 @@ model::Song SongRepository::retrieveRecord(model::Song& song, type::SongFilter f params[0].is_null = 0; break; case type::SongFilter::titleAndArtist: - qry << "Title = ? AND Artist = ?"; + qry << "sng.Title = ? AND sng.Artist = ?"; params[0].buffer_type = MYSQL_TYPE_STRING; params[0].buffer = (char*)song.title.c_str(); @@ -86,6 +86,9 @@ model::Song SongRepository::retrieveRecord(model::Song& song, type::SongFilter f params[1].buffer = (char*)song.artist.c_str(); params[1].length = &artistLength; params[1].is_null = 0; + + std::cout << "title: " << song.title.c_str() << " artist: " << + song.artist.c_str() << "\n"; break; default: break; @@ -100,13 +103,14 @@ model::Song SongRepository::retrieveRecord(model::Song& song, type::SongFilter f std::cout << "the query has been performed" << std::endl; - song = parseRecord(stmt); + //song = parseRecord(stmt); + auto retrievedSong = parseRecord(stmt); mysql_stmt_close(stmt); mysql_close(conn); std::cout << "done" << std::endl; - return song; + return retrievedSong; } @@ -522,6 +526,8 @@ std::vector SongRepository::parseRecords(MYSQL_STMT *stmt) model::Song SongRepository::parseRecord(MYSQL_STMT *stmt) { + mysql_stmt_store_result(stmt); + std::cout << "amount of rows: " << mysql_stmt_num_rows(stmt) << std::endl; model::Song song; auto metaBuff = metadataBuffer(); auto bindedValues = valueBind(song, metaBuff); @@ -529,6 +535,7 @@ model::Song SongRepository::parseRecord(MYSQL_STMT *stmt) status = mysql_stmt_fetch(stmt); song.title = std::get<0>(metaBuff); + std::cout << "parsing song record\n the title is: " << song.title << std::endl; song.artist = std::get<1>(metaBuff); song.album = std::get<2>(metaBuff); song.genre = std::get<3>(metaBuff);