//
-// Open Service Platform
// Copyright (c) 2012 Samsung Electronics Co., Ltd.
//
// Licensed under the Apache License, Version 2.0 (the License);
using namespace Tizen::Base::Collection;
using namespace Tizen::App;
-const char* _DATACONTROL_RESULTSET_DIR = "/tmp/osp/DataControlResultSet/\0";
+const char* _DATACONTROL_RESULT_DIR = "/tmp/osp/data-control/result/\0";
+const char* _DATACONTROL_RESULT_COMPAT_DIR = "/tmp/osp/DataControlResult/\0";
namespace Tizen { namespace Io
{
+static const int _DATACONTROL_PACKET_INDEX_COLUMNCOUNT = 1;
+
_DataControlResultSetImpl::_DataControlResultSetImpl(RequestId reqId)
: __constructed(true)
, __pageNo(1)
, __countPerPage(0)
, __result(E_SUCCESS)
- , __tmpPath("")
+ , __tmpPath(L"")
, __reqId(reqId)
{
}
// [sizeof(int)] size
// [ varient ] content
result
-_DataControlResultSetImpl::FillWith(IDbEnumerator* pDbEnum)
+_DataControlResultSetImpl::FillWith(IDbEnumerator* pDbEnum, String& version)
{
- String tempFilePath(_DATACONTROL_RESULTSET_DIR);
+ String tempFilePath;
String columnName;
- String* pAppId = null;
- String* pRequestType = null;
- String* pReqId = null;
+ String callerAppId;
+ String reqType;
+ String callerReqId;
String* pNo = null;
String* pCount = null;
String* pColumnCount = null;
SysAssertf(__constructed == true, "Not yet constructed. Construct() should be called before use.\n\n");
_AppControlManager* pAppMgr = _AppControlManager::GetInstance();
- SysTryReturnResult(NID_APP, pAppMgr, E_SYSTEM, "Failed to get instance.");
+ SysTryReturnResult(NID_IO, pAppMgr, E_SYSTEM, "Failed to get instance.");
- _ResultInfo* pResultInfo = pAppMgr->__resultManager.FindItem(static_cast< int >(__reqId));
- SysTryReturnResult(NID_APP, pResultInfo, E_OBJ_NOT_FOUND,
- "The data control request specified with the reqId (%ld) did not exist.", __reqId);
+ _ResultInfo* pResultInfo = pAppMgr->__resultManager.FindItem(static_cast< int >(__reqId)); // provider reqId
+ SysTryReturnResult(NID_IO, pResultInfo, E_OBJ_NOT_FOUND,
+ "The data control request specified with the req (%ld) did not exist.", __reqId);
const _AppArg& arg = pResultInfo->arg;
- std::unique_ptr<ArrayList, AllElementsDeleter> pList(arg.GetArgListN(0));
- SysTryReturnResult(NID_APP, pList, E_SYSTEM, "Invalid result object.");
-
// key-based request
- pAppId = dynamic_cast< String* >(pList->GetAt(0)); // key[0]
- SysTryReturnResult(NID_APP, pAppId, E_SYSTEM, "Invalid request.");
-
- pRequestType = dynamic_cast< String* >(pList->GetAt(1)); // key[1]
- SysTryReturnResult(NID_APP, pRequestType, E_SYSTEM, "Invalid request.");
- Integer::Parse(*pRequestType, type);
+ reqType = arg.GetValue(OSP_K_DATACONTROL_REQUEST_TYPE);
+ Integer::Parse(reqType, type);
requestType = static_cast< _DataControlRequestType >(type);
- SysTryReturnResult(NID_APP, requestType == _DATACONTROL_REQUEST_TYPE_SQL_QUERY, E_INVALID_ARG,
+ SysTryReturnResult(NID_IO, requestType == _DATACONTROL_REQUEST_TYPE_SQL_QUERY, E_INVALID_ARG,
"The reqId should be for the data control query request.");
- pReqId = dynamic_cast< String* >(pList->GetAt(2)); // key[2]
- SysTryReturnResult(NID_APP, pReqId, E_SYSTEM, "Invalid request.");
+ callerAppId = arg.GetCallerAppId();
+ callerReqId = arg.GetValue(OSP_K_REQUEST_ID);
// list-based request
- pColumnCount = dynamic_cast< String* >(pList->GetAt(5));
- SysTryReturnResult(NID_APP, pColumnCount, E_SYSTEM, "Invalid result object.");
+ std::unique_ptr< ArrayList, AllElementsDeleter > pList(_AppArg::GetListN(arg.GetBundle(), OSP_K_ARG));
+ SysTryReturnResult(NID_IO, pList, E_SYSTEM, "Invalid result object.");
+
+ pColumnCount = dynamic_cast< String* >(pList->GetAt(_DATACONTROL_PACKET_INDEX_COLUMNCOUNT));
+ SysTryReturnResult(NID_IO, pColumnCount, E_SYSTEM, "Invalid result object.");
Integer::Parse(*pColumnCount, columnCount);
- pageNoIndex = 5 + columnCount + 2 + 1;
+ pageNoIndex = _DATACONTROL_PACKET_INDEX_COLUMNCOUNT + columnCount + 2 + 1;
pNo = dynamic_cast< String* >(pList->GetAt(pageNoIndex));
- SysTryReturnResult(NID_APP, pNo, E_SYSTEM, "Invalid result object.");
+ SysTryReturnResult(NID_IO, pNo, E_SYSTEM, "Invalid result object.");
Integer::Parse(*pNo, pageNo);
pCount = dynamic_cast< String* >(pList->GetAt(pageNoIndex + 1));
- SysTryReturnResult(NID_APP, pCount, E_SYSTEM, "Invalid result object.");
+ SysTryReturnResult(NID_IO, pCount, E_SYSTEM, "Invalid result object.");
Integer::Parse(*pCount, countPerPage);
this->SetCapacity(pageNo, countPerPage);
- tempFilePath.Append(*pAppId);
- tempFilePath.Append(*pReqId);
+ if (version == L"ver_2.1.0.3")
+ {
+ tempFilePath.Append(_DATACONTROL_RESULT_DIR);
+ }
+ else
+ {
+ tempFilePath.Append(_DATACONTROL_RESULT_COMPAT_DIR);
+ }
+ tempFilePath.Append(callerAppId);
+ tempFilePath.Append(callerReqId);
__tmpPath = tempFilePath;
+ SysSecureLog(NID_IO, "[DC_PROV_SEND] temp file path: %ls", tempFilePath.GetPointer());
// initialize
r = pDbEnum->Reset();
if (r == E_OUT_OF_RANGE) // the previous pages do not exist
{
__result = E_OUT_OF_RANGE;
- SysTryReturnResult(NID_APP, false, E_SUCCESS, "Out of range error.");
+ SysTryReturnResult(NID_IO, false, E_SUCCESS, "Out of range error.");
}
SysTryReturnResult(NID_IO, !IsFailed(r), E_DATABASE,
"The database engine has failed to enumerator result set.");
if (r == E_OUT_OF_RANGE) // the specific page is empty
{
__result = E_OUT_OF_RANGE;
- SysTryReturnResult(NID_APP, false, E_SUCCESS, "Out of range error.");
+ SysTryReturnResult(NID_IO, false, E_SUCCESS, "Out of range error.");
}
SysTryReturnResult(NID_IO, !IsFailed(r), E_DATABASE,
"The database engine has failed to enumerate the result set.");
SysTryReturnResult(NID_IO, pFile != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
- r = pFile->Construct(__tmpPath, "w+", true);
+ r = pFile->Construct(__tmpPath, L"w+", true);
SysTryReturn(NID_IO, r == E_SUCCESS, r, r, "[%s] Failed to create temp file (%ls) for result set.",
GetErrorMessage(r), __tmpPath.GetPointer());
columnCount = pDbEnum->GetColumnCount();
- SysLog(NID_IO, "column count is %d.\n", columnCount);
+ SysSecureLog(NID_IO, "column count is %d.\n", columnCount);
r = pFile->Seek(FILESEEKPOSITION_BEGIN, sizeof(int));
SysTryReturn(NID_IO, r == E_SUCCESS, r, r, "[%s] System error was occurred.", GetErrorMessage(r));
break;
}
+ case DB_COLUMNTYPE_NULL:
+ {
+ type = 5; // null type
+ break;
+ }
+
default:
- SysLog(NID_IO, "type: UNDEFINDE (%d)", type);
+ SysLog(NID_IO, "type: UNDEFINED (%d)", type);
break;
}
r = pFile->Write(&type, sizeof(int));
byte = strlen(pColumnName);
totalSizeOfColumnNames += byte;
- SysLog(NID_IO, "[%d] column name: %s", i, pColumnName);
+ SysSecureLog(NID_IO, "[%d] column name: %s", i, pColumnName);
delete[] pColumnName;
}
r = pFile->Seek(FILESEEKPOSITION_BEGIN, sizeof(int) * 2);
r = pFile->Write(&size, sizeof(int));
SysTryReturn(NID_IO, r == E_SUCCESS, r, r, "[%s] System error was occurred.", GetErrorMessage(r));
-
r = pFile->Write(&int64Value, sizeof(long long));
SysTryReturn(NID_IO, r == E_SUCCESS, r, r, "[%s] System error was occurred.", GetErrorMessage(r));
break;
r = pFile->Write(&size, sizeof(int));
SysTryReturn(NID_IO, r == E_SUCCESS, r, r, "[%s] System error was occurred.", GetErrorMessage(r));
- r = pFile->Write(pContent.get(), size);
- SysTryReturn(NID_IO, r == E_SUCCESS, r, r, "[%s] System error was occurred.", GetErrorMessage(r));
-
+ if (size > 0)
+ {
+ r = pFile->Write(pContent.get(), size);
+ SysTryReturn(NID_IO, r == E_SUCCESS, r, r, "[%s] System error was occurred.", GetErrorMessage(r));
+ }
break;
}
r = pFile->Write(&size, sizeof(int));
SysTryReturn(NID_IO, r == E_SUCCESS, r, r, "[%s] System error was occurred.", GetErrorMessage(r));
- r = pFile->Write(blobValue);
+ if (size > 0)
+ {
+ r = pFile->Write(blobValue);
+ SysTryReturn(NID_IO, r == E_SUCCESS, r, r, "[%s] System error was occurred.", GetErrorMessage(r));
+ }
+ break;
+ }
+
+ case DB_COLUMNTYPE_NULL:
+ {
+ int type = 5; // null
+ int size = 0;
+
+ r = pFile->Write(&type, sizeof(int));
+ SysTryReturn(NID_IO, r == E_SUCCESS, r, r, "[%s] System error was occurred.", GetErrorMessage(r));
+
+ r = pFile->Write(&size, sizeof(int));
SysTryReturn(NID_IO, r == E_SUCCESS, r, r, "[%s] System error was occurred.", GetErrorMessage(r));
break;
}