Add delimiter among columns on query-builder
authorsangwan.kwon <sangwan.kwon@samsung.com>
Tue, 30 Jan 2018 11:55:33 +0000 (20:55 +0900)
committerJaemin Ryu <jm77.ryu@samsung.com>
Mon, 11 Feb 2019 04:22:16 +0000 (13:22 +0900)
Change-Id: Ieef134d63f16b54e7090a2a6ddd98f5684d272b1
Signed-off-by: sangwan.kwon <sangwan.kwon@samsung.com>
include/klay/db/query-builder/database.hxx
include/klay/db/query-builder/table.hxx
test/query-builder.cpp

index 060ef1b3d9cd7901273470c5d58bfe02156d4a44..7d8fdac634b7fb318a98c3e289e171683745d81d 100644 (file)
@@ -136,16 +136,21 @@ Database<Tables...> Database<Tables...>::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 << ", ";
        }
 
index b35cb68387bc71cd3558b6f0aeba3dadd337ca8e..db4364cc756ec24e61b9afcc53dbc189b3edcaa9 100644 (file)
@@ -150,10 +150,15 @@ Table<Columns...> Table<Columns...>::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<Columns...> Table<Columns...>::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());
 
index 79813c03fa3d571af3c061ec4f1e6ad6731dfeb2..4b0aa2a79e3327e24432ebae8e1f4b70c49a28f7 100644 (file)
@@ -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 "