From: sangwan.kwon Date: Tue, 30 Jan 2018 11:55:33 +0000 (+0900) Subject: Add delimiter among columns on query-builder X-Git-Tag: submit/tizen/20190219.012108~13 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e9850beccc80421735af8077962732afac7515e8;p=platform%2Fcore%2Fsecurity%2Fklay.git Add delimiter among columns on query-builder Change-Id: Ieef134d63f16b54e7090a2a6ddd98f5684d272b1 Signed-off-by: sangwan.kwon --- diff --git a/include/klay/db/query-builder/database.hxx b/include/klay/db/query-builder/database.hxx index 060ef1b..7d8fdac 100644 --- a/include/klay/db/query-builder/database.hxx +++ b/include/klay/db/query-builder/database.hxx @@ -136,16 +136,21 @@ Database Database::select(ColumnTypes&&... cts) std::stringstream ss; ss << "SELECT "; - for(const auto& c : columnNames) - ss << c << " "; + int i = 0; + for (const auto& c : columnNames) { + ss << c; + + if (i++ < columnNames.size() - 1) + ss << ", "; + } - ss << "FROM "; + ss << " FROM "; - int i = 0; - for(const auto& t : tableNames) { + i = 0; + for (const auto& t : tableNames) { ss << t; - if(i++ < tableNames.size() - 1) + if (i++ < tableNames.size() - 1) ss << ", "; } diff --git a/include/klay/db/query-builder/table.hxx b/include/klay/db/query-builder/table.hxx index b35cb68..db4364c 100644 --- a/include/klay/db/query-builder/table.hxx +++ b/include/klay/db/query-builder/table.hxx @@ -150,10 +150,15 @@ Table Table::selectInternal(ColumnTuple&& ct, bool disti if (distinct) ss << "DISTINCT "; - for (const auto& c : columnNames) - ss << c << " "; + int i = 0; + for (const auto& c : columnNames) { + ss << c; + + if (i++ < columnNames.size() - 1) + ss << ", "; + } - ss << "FROM " << this->name; + ss << " FROM " << this->name; cache.emplace_back(ss.str()); @@ -184,10 +189,15 @@ Table Table::update(ColumnTypes&&... cts) std::stringstream ss; ss << "UPDATE " << this->name << " "; - ss << "SET"; + ss << "SET "; - for (const auto& c : columnNames) - ss << " " << c << " = ?"; + int i = 0; + for (const auto& c : columnNames) { + ss << c << " = ?"; + + if (i++ < columnNames.size() - 1) + ss << ", "; + } cache.emplace_back(ss.str()); diff --git a/test/query-builder.cpp b/test/query-builder.cpp index 79813c0..4b0aa2a 100644 --- a/test/query-builder.cpp +++ b/test/query-builder.cpp @@ -70,8 +70,8 @@ TESTCASE(SELECT) std::string select1 = admin.select(&Admin::id, &Admin::pkg, &Admin::uid, &Admin::key); std::string select2 = admin.select(&Admin::id, &Admin::uid, &Admin::key); - TEST_EXPECT(true, select1 == "SELECT id pkg uid key FROM admin"); - TEST_EXPECT(true, select2 == "SELECT id uid key FROM admin"); + TEST_EXPECT(true, select1 == "SELECT id, pkg, uid, key FROM admin"); + TEST_EXPECT(true, select2 == "SELECT id, uid, key FROM admin"); } TESTCASE(SELECT_ALL) @@ -91,7 +91,7 @@ TESTCASE(SELECT_WHERE) std::string select4 = admin.selectAll().where(expr(&Admin::uid) > 3 || expr(&Admin::pkg) == "dpm"); - TEST_EXPECT(true, select1 == "SELECT uid key FROM admin WHERE id > ?"); + TEST_EXPECT(true, select1 == "SELECT uid, key FROM admin WHERE id > ?"); TEST_EXPECT(true, select2 == "SELECT * FROM admin WHERE uid > ?"); TEST_EXPECT(true, select3 == "SELECT * FROM admin WHERE uid > ? AND pkg = ?"); TEST_EXPECT(true, select4 == "SELECT * FROM admin WHERE uid > ? OR pkg = ?"); @@ -102,7 +102,7 @@ TESTCASE(SELECT_DISTINCT) std::string select = admin.select(distinct(&Admin::uid, &Admin::key)) .where(expr(&Admin::id) > 3); - TEST_EXPECT(true, select == "SELECT DISTINCT uid key FROM admin WHERE id > ?"); + TEST_EXPECT(true, select == "SELECT DISTINCT uid, key FROM admin WHERE id > ?"); } TESTCASE(UPDATE) @@ -114,9 +114,9 @@ TESTCASE(UPDATE) std::string update3 = admin.update(&Admin::key, &Admin::pkg) .where(expr(&Admin::uid) == 0 && expr(&Admin::id) == 1); - TEST_EXPECT(true, update1 == "UPDATE admin SET id = ? pkg = ? uid = ? key = ?"); + TEST_EXPECT(true, update1 == "UPDATE admin SET id = ?, pkg = ?, uid = ?, key = ?"); TEST_EXPECT(true, update2 == "UPDATE admin SET key = ? WHERE uid = ? AND id = ?"); - TEST_EXPECT(true, update3 == "UPDATE admin SET key = ? pkg = ? WHERE uid = ? AND id = ?"); + TEST_EXPECT(true, update3 == "UPDATE admin SET key = ?, pkg = ? WHERE uid = ? AND id = ?"); } TESTCASE(DELETE) @@ -161,9 +161,9 @@ TESTCASE(MULTI_SELECT) &ManagedPolicy::id, &ManagedPolicy::value) .where(expr(&Admin::uid) > 0 && expr(&ManagedPolicy::id) == 3); - TEST_EXPECT(true, multiSelect1 == "SELECT admin.uid admin.key managed_policy.id " + TEST_EXPECT(true, multiSelect1 == "SELECT admin.uid, admin.key, managed_policy.id, " "managed_policy.value FROM admin, managed_policy"); - TEST_EXPECT(true, multiSelect2 == "SELECT admin.uid admin.key managed_policy.id " + TEST_EXPECT(true, multiSelect2 == "SELECT admin.uid, admin.key, managed_policy.id, " "managed_policy.value FROM admin, managed_policy " "WHERE admin.uid > ? AND managed_policy.id = ?"); } @@ -181,9 +181,9 @@ TESTCASE(JOIN) .on(expr(&ManagedPolicy::aid) == expr(&Admin::id)) .where(expr(&ManagedPolicy::pid) == 99); - TEST_EXPECT(true, join1 == "SELECT admin.uid admin.key FROM admin " + TEST_EXPECT(true, join1 == "SELECT admin.uid, admin.key FROM admin " "LEFT OUTER JOIN policy_definition"); - TEST_EXPECT(true, join2 == "SELECT admin.uid admin.key FROM admin " + TEST_EXPECT(true, join2 == "SELECT admin.uid, admin.key FROM admin " "CROSS JOIN managed_policy"); TEST_EXPECT(true, join3 == "SELECT managed_policy.value FROM managed_policy " "INNER JOIN policy_definition "