merge with master
[framework/osp/net.git] / src / FNet_NetAccountDatabase.cpp
index 7a8c6e5..8f60328 100644 (file)
@@ -364,6 +364,59 @@ _NetAccountDatabase::GetAccountNamesN(void)
 }
 
 IList*
+_NetAccountDatabase::GetProfileNamesN(void)
+{
+       static const wchar_t _NET_ACCOUNT_DATABASE_GET_PROFILE_NAMES_STATEMENT[] =
+                       L"SELECT profileName FROM NetAccountTable";
+
+       result r = E_SUCCESS;
+       Database accountDb;
+       unique_ptr<DbStatement> pStmt;
+       unique_ptr<DbEnumerator> pEnum;
+       unique_ptr<ArrayList, _CollectionDeleter> pList;
+
+       r = accountDb.Construct(_NetAccountDatabase::GetDbPath(), false);
+       SysTryReturn(NID_NET, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       pStmt.reset(accountDb.CreateStatementN(String(_NET_ACCOUNT_DATABASE_GET_PROFILE_NAMES_STATEMENT)));
+       r = GetLastResult();
+       SysTryReturn(NID_NET, pStmt != null, null, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       pList.reset(new (std::nothrow) ArrayList());
+       r = GetLastResult();
+       SysTryReturn(NID_NET, pList != null, null, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       r = pList->Construct();
+       SysTryReturn(NID_NET, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       pEnum.reset(accountDb.ExecuteStatementN(*pStmt));
+       r = GetLastResult();
+       SysTryReturn(NID_NET, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       if (pEnum != null)
+       {
+               while (pEnum->MoveNext() == E_SUCCESS)
+               {
+                       unique_ptr<String> pProfileName(new (std::nothrow) String());
+                       SysTryReturn(NID_NET, pProfileName != null, null, E_OUT_OF_MEMORY,
+                                       "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
+
+                       r = pEnum->GetStringAt(0, *pProfileName);
+                       SysTryReturn(NID_NET, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
+
+                       r = pList->Add(*pProfileName);
+                       SysTryReturn(NID_NET, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
+
+                       pProfileName.release();
+               }
+       }
+
+       ClearLastResult(); // To suppress E_OUT_OF_RANGE
+
+       return pList.release();
+}
+
+IList*
 _NetAccountDatabase::GetAppProfileNamesN(void)
 {
        static const wchar_t _NET_ACCOUNT_DATABASE_GET_PROFILE_NAMES_STATEMENT[] =