//*----------------------------------------------------------------------- // // Conformance Test for ICommandStream interface. // // WARNING: // PLEASE USE THE TEST CASE WIZARD TO ADD/DELETE TESTS AND VARIATIONS! // // // Copyright (C) 1994-2000 Microsoft Corporation //*----------------------------------------------------------------------- #include "MODStandard.hpp" #include "ICmdStream.h" #include "ExtraLib.h" //*----------------------------------------------------------------------- // Module Values //*----------------------------------------------------------------------- // {{ TCW_MODULE_GLOBALS DECLARE_MODULE_CLSID = { 0x58748a00, 0x8be4, 0x11d3, { 0x89, 0x4b, 0x00, 0x60, 0x08, 0x9f, 0xc4, 0x66} }; DECLARE_MODULE_NAME("ICommandStream"); DECLARE_MODULE_OWNER("Microsoft"); DECLARE_MODULE_DESCRIP("ICommandStream Test Module"); DECLARE_MODULE_VERSION(1); // TCW_WizardVersion(2) // TCW_Automation(FALSE) // }} TCW_MODULE_GLOBALS_END /////////////////////////////////////////////////////////// //GLOBALS /////////////////////////////////////////////////////////// GUID GUIDNULL = DB_NULLGUID; WCHAR wszByteOrder[1] = {0xFEFF}; BOOL g_fSQLOLEDB = FALSE; //*----------------------------------------------------------------------- // @func Module level initialization routine // // @rdesc Success or Failure // @flag TRUE | Successful initialization // @flag FALSE | Initialization problems // BOOL ModuleInit(CThisTestModule * pThisTestModule) { TBEGIN HRESULT hr = E_FAIL; WCHAR* wszProviderName = NULL; IDBCreateCommand* pIDBCreateCommand = NULL; ICommandStream* pICmdStream = NULL; // Get connection and session objects TESTC(ModuleCreateDBSession(pThisTestModule)); // IDBCreateCommand TESTC_PROVIDER(VerifyInterface(pThisTestModule->m_pIUnknown2, IID_IDBCreateCommand, SESSION_INTERFACE, (IUnknown**)&pIDBCreateCommand)) TEST2C_(hr = pIDBCreateCommand->CreateCommand(NULL, IID_ICommandStream, (IUnknown**)&pICmdStream), S_OK, E_NOINTERFACE) TESTC_PROVIDER(hr == S_OK) // Create a table and store it in pVoid for now pThisTestModule->m_pVoid = new CTable( (IUnknown *)pThisTestModule->m_pIUnknown2, (LPWSTR)gwszModuleName); TESTC(pThisTestModule->m_pVoid != NULL); // Start with a table with 10 rows TESTC_(((CTable *)pThisTestModule->m_pVoid)->CreateTable(10), S_OK); g_fSQLOLEDB=FALSE; if (GetProperty(DBPROP_PROVIDERNAME, DBPROPSET_DATASOURCEINFO, pThisTestModule->m_pIUnknown, &wszProviderName) && wszProviderName) { if (!wcscmp((LPWSTR)wszProviderName, L"sqloledb.dll")) g_fSQLOLEDB=TRUE; } CLEANUP: SAFE_FREE(wszProviderName); SAFE_RELEASE(pICmdStream); SAFE_RELEASE(pIDBCreateCommand); TRETURN } //*----------------------------------------------------------------------- // @func Module level termination routine // // @rdesc Success or Failure // @flag TRUE | Successful initialization // @flag FALSE | Initialization problems // BOOL ModuleTerminate(CThisTestModule * pThisTestModule) { // Drop the table created in the ModuleInit if( pThisTestModule->m_pVoid ) { // Remove table from database and Delete CTable object ((CTable *)pThisTestModule->m_pVoid)->DropTable(); delete ((CTable *)pThisTestModule->m_pVoid); pThisTestModule->m_pVoid = NULL; } return ModuleReleaseDBSession(pThisTestModule); } /////////////////////////////////////////////////////////////// // Base class for testing ICommandStream interface // /////////////////////////////////////////////////////////////// class CCmdStream : public CSessionObject { public: // @cmember Constructor CCmdStream(LPWSTR wszTestCaseName) : CSessionObject (wszTestCaseName) { m_pwszQ1 = NULL; m_pwszQ2 = NULL; m_pStorageGet = NULL; m_pStorageSet = NULL; m_pICommandText = NULL; m_pICommandStream = NULL; }; // @cmember Destructor virtual ~CCmdStream() {}; protected: //VARIABLES //Storage object used for getting back cmd stream CStorage* m_pStorageGet; //Storage object used for setting cmd stream CStorage* m_pStorageSet; //Queries that will successfully Execute when set on //ICommandStream with DBGUID_DEFAULT. WCHAR* m_pwszQ1; WCHAR* m_pwszQ2; //INTERFACES // @cmember ICommandText Interface pointer ICommandText * m_pICommandText; // @cmember ICommandText Interface pointer ICommandStream * m_pICommandStream; //FUNCTIONS //@cmember Init BOOL Init(); //@cmember Terminate BOOL Terminate(); //Get the Queries. BOOL GetQueries(); //Wrapper for ICommandStream::GetCommandStream. HRESULT GetCmdStream(IID* piid, GUID* pguid, WCHAR** pwszCmd=NULL); //Wrapper for ICommandStream::SetCommandStream. HRESULT SetCmdStream(IID iid, GUID guid, WCHAR* pwszCmd=NULL); //Reads the stream obtained by GetCommandStream, or //pUnkStream. Reads as unicode. HRESULT Read(WCHAR** ppwszCmd, IUnknown* pUnkStream=NULL); //Write to the stream to be set using SetCommandStream. HRESULT Write(WCHAR* pwszCmd); //Prepare the command. BOOL PrepCmd(); //Set a command property HRESULT SetCmdProp(DBPROPSET* prgPropSet, IUnknown* pICmd=NULL); //Default testing function for ICommandStream interface. BOOL DefTest(ICommandStream* pICS); //Verification function for rowsets. BOOL VerifyRowset(EQUERY eQuery, IRowset* pIR); //Verification function for m_pwszQ1. BOOL VerifyQuery1(IUnknown* pIStream, REFIID riid); //Verification function for m_pwszQ2. BOOL VerifyQuery2(IUnknown* pIStream, REFIID riid); BOOL GetAttrValue(IXMLDOMNode* pNode, WCHAR** ppwszName, WCHAR** ppwszVal); BOOL QIDOMNode(IXMLDOMNode* pIn, IXMLDOMNode** pOut); //Set a DBPROP_OUTPUTENCODING. HRESULT SetEncdProp(ENCODING eOE, IUnknown* pICmd=NULL); }; //-------------------------------------------------------------- // CCmdStream::Init // BOOL CCmdStream::Init() { TBEGIN TESTC(COLEDB::Init()) // Set needed pointers SetDataSourceObject(m_pThisTestModule->m_pIUnknown, TRUE); SetDBSession((IDBCreateCommand *)m_pThisTestModule->m_pIUnknown2); SetTable((CTable *)(m_pThisTestModule->m_pVoid), DELETETABLE_NO); TESTC_(m_pIDBCreateCommand->CreateCommand(NULL, IID_ICommandStream, (IUnknown**)&m_pICommandStream), S_OK) TESTC(VerifyInterface(m_pICommandStream, IID_ICommandText, COMMAND_INTERFACE,(IUnknown **)&m_pICommandText)) TESTC(GetQueries()) CHECK(SetEncdProp(UTF16), S_OK); CLEANUP: TRETURN } //-------------------------------------------------------------- // CCmdStream::Terminate // BOOL CCmdStream::Terminate() { // Release objects SAFE_FREE(m_pwszQ1); SAFE_FREE(m_pwszQ2); SAFE_RELEASE(m_pStorageGet); SAFE_RELEASE(m_pStorageSet); SAFE_RELEASE(m_pICommandText); SAFE_RELEASE(m_pICommandStream); ReleaseDBSession(); ReleaseDataSourceObject(); return(COLEDB::Terminate()); } //-------------------------------------------------------------- // CCmdStream::GetQueries // BOOL CCmdStream::GetQueries() { TBEGIN BOOL fRet = FALSE; WCHAR* pwszSQL = NULL; WCHAR* pwszCol = NULL; CCol rgCol; m_pwszQ1 = wcsDuplicate(GetModInfo()->GetParseObject()->GetQuery(SETCMDSTREAM_QUERY1)); m_pwszQ2 = wcsDuplicate(GetModInfo()->GetParseObject()->GetQuery(SETCMDSTREAM_QUERY2)); if(m_pwszQ1) goto QUERY2; TESTC_(m_pTable->GetColInfo(1, rgCol), S_OK) pwszCol = rgCol.GetColName(); SAFE_ALLOC(pwszSQL, WCHAR, (sizeof(WCHAR) * (wcslen(wszSELECT_COLLISTFROMTBL) + wcslen(pwszCol) + wcslen(m_pTable->GetTableName()) - 4)) + sizeof(WCHAR)); // Format SQL Statement swprintf(pwszSQL, wszSELECT_COLLISTFROMTBL, pwszCol, m_pTable->GetTableName()); SAFE_ALLOC(m_pwszQ1, WCHAR, wcslen(L" for xml auto")+wcslen(pwszSQL)+sizeof(WCHAR)); wcscpy(m_pwszQ1, L""); wcscat(m_pwszQ1, pwszSQL); wcscat(m_pwszQ1, L" for xml auto"); //m_pwszQ1 = wcsDuplicate(L"select uid from sysusers for xml auto"); SAFE_FREE(pwszSQL); TESTC(m_pwszQ1 != NULL) QUERY2: if(m_pwszQ2) goto CLEANUP; m_pwszQ2 = wcsDuplicate(L"Some valid xml. Will be echoed by Execute."); TESTC(m_pwszQ2 != NULL) CLEANUP: SAFE_FREE(pwszSQL); TRETURN } //-------------------------------------------------------------- // CCmdStream::GetCmdStream // HRESULT CCmdStream::GetCmdStream(IID* piid, GUID* pguid, WCHAR** ppwszCmd) { HRESULT hr=E_FAIL; GUID guidIn; if(!m_pICommandStream) return E_FAIL; if(pguid) guidIn = *pguid; hr = m_pICommandStream->GetCommandStream(piid, pguid, (IUnknown**)&m_pStorageGet); if(m_pStorageGet && g_fSQLOLEDB) m_pStorageGet->Seek(0); //Common verification if(SUCCEEDED(hr)) { COMPARE(m_pStorageGet != NULL, TRUE); if(pguid && hr==S_OK) COMPARE(*pguid==guidIn, TRUE); if(hr == DB_S_DIALECTIGNORED) { COMPARE(pguid != NULL, TRUE); if(pguid) COMPARE(*pguid!=guidIn, TRUE); } } else { COMPARE(m_pStorageGet == NULL, TRUE); m_pStorageGet = NULL; if(pguid) COMPARE(*pguid, GUIDNULL); if(piid) COMPARE(*piid, IID_NULL); } //Mask this code with S_OK for convenience. if(hr == DB_S_DIALECTIGNORED) { odtLog<Seek(0); } return hr; } //-------------------------------------------------------------- // CCmdStream::SetCmdStream // HRESULT CCmdStream::SetCmdStream(IID iid, GUID guid, WCHAR* pwszCmd) { HRESULT hr=E_FAIL; if(!m_pICommandStream || !m_pStorageSet) return E_FAIL; if(pwszCmd) { CHECK(Write(pwszCmd), S_OK); } hr = m_pICommandStream->SetCommandStream(iid, guid, (ISequentialStream*)m_pStorageSet); return hr; } //-------------------------------------------------------------- // CCmdStream::Read // HRESULT CCmdStream::Read(WCHAR** ppwszCmd, IUnknown* pUnkStream) { HRESULT hr=E_FAIL; ULONG cRead = 0; ULONG ulReadIncr = READ_INCR; WCHAR* pwszCmd = NULL; BYTE* pwszEnd = NULL; BOOL fEnd = FALSE; ISequentialStream* pISS = NULL; if(!pUnkStream) pUnkStream = (ISequentialStream*)m_pStorageGet; if(!m_pICommandStream || !pUnkStream || !ppwszCmd) return E_FAIL; *ppwszCmd = NULL; TESTC(VerifyInterface(pUnkStream, IID_ISequentialStream, STREAM_INTERFACE,(IUnknown **)&pISS)) SAFE_ALLOC(pwszCmd, WCHAR, ulReadIncr); //First read 2 bytes only. If this is the byte-order //mark, remove it. hr = pISS->Read(pwszCmd, 2, &cRead); //If the stream was empty ... if((hr==S_FALSE) && (cRead==0)) { fEnd = TRUE; SAFE_FREE(pwszCmd); } if(cRead==2) { if(memcmp(wszByteOrder, pwszCmd, 2) == 0) { hr = pISS->Read(pwszCmd, ulReadIncr, &cRead); if(cRead < ulReadIncr) { fEnd = TRUE; pwszEnd = (BYTE*)pwszCmd + cRead; } } else { hr = pISS->Read((BYTE*)pwszCmd +2, ulReadIncr-2, &cRead); if(cRead < ulReadIncr-2) { fEnd = TRUE; pwszEnd = (BYTE*)pwszCmd +2 + cRead; } } } while(!fEnd) { cRead = 0; ulReadIncr += READ_INCR; SAFE_REALLOC(pwszCmd, WCHAR, ulReadIncr); hr = pISS->Read((BYTE*)pwszCmd +ulReadIncr -READ_INCR, READ_INCR, &cRead); if(cRead < READ_INCR) { fEnd = TRUE; pwszEnd = (BYTE*)pwszCmd +ulReadIncr -READ_INCR + cRead; } } if(pwszEnd) memset((BYTE*)pwszEnd, 0, 2); if(fEnd) { hr = S_OK; *ppwszCmd = pwszCmd; } CLEANUP: SAFE_RELEASE(pISS); return hr; } //-------------------------------------------------------------- // CCmdStream::Write // HRESULT CCmdStream::Write(WCHAR* pwszCmd) { HRESULT hr=E_FAIL; ULONG cWrote = 0; ULONG ulLen = 0; if(!m_pICommandStream || !m_pStorageSet || !pwszCmd) return E_FAIL; ulLen = (ULONG)(wcslen(pwszCmd)); hr = m_pStorageSet->Write(wszByteOrder, 2, NULL); hr = m_pStorageSet->Write(pwszCmd, (ulLen)*sizeof(WCHAR), &cWrote); m_pStorageSet->Seek(0); return hr; } //-------------------------------------------------------------- // CCmdStream::PrepCmd // BOOL CCmdStream::PrepCmd() { BOOL fRet = FALSE; ICommandPrepare* pICmdPrep = NULL; if(VerifyInterface(m_pICommandStream, IID_ICommandPrepare, COMMAND_INTERFACE,(IUnknown **) &pICmdPrep)) { TESTC_(pICmdPrep->Prepare(1), S_OK) } fRet = TRUE; CLEANUP: SAFE_RELEASE(pICmdPrep); return fRet; } //-------------------------------------------------------------- // CCmdStream::SetCmdProp // HRESULT CCmdStream::SetCmdProp(DBPROPSET* rgPropSet, IUnknown* pICmd) { HRESULT hr = E_FAIL; ICommandProperties* pICP = NULL; if(pICmd && !VerifyInterface(pICmd, IID_ICommandProperties, COMMAND_INTERFACE,(IUnknown **) &pICP)) return E_FAIL; if(!pICP && !VerifyInterface(m_pICommandStream, IID_ICommandProperties, COMMAND_INTERFACE,(IUnknown **) &pICP)) return E_FAIL; if(rgPropSet) hr = pICP->SetProperties(1, rgPropSet); SAFE_RELEASE(pICP); return hr; } //-------------------------------------------------------------- // CCmdStream::SetEncdProp // HRESULT CCmdStream::SetEncdProp(ENCODING eOE, IUnknown* pICmd) { HRESULT hr = E_FAIL; ULONG cPropSets = 0; DBPROPSET* rgPropSets = NULL; BSTR bstr; if(eOE == UTF8) bstr = L"UTF-8"; else if(eOE == UTF16) bstr = L"UTF-16"; else return E_FAIL; SetProperty(DBPROP_OUTPUTENCODING, DBPROPSET_STREAM, &cPropSets, &rgPropSets, (void*)bstr, DBTYPE_BSTR); hr = SetCmdProp(rgPropSets, pICmd); COMPARE(hr==S_OK || hr==DB_E_ERRORSOCCURRED, TRUE); if(FAILED(hr)) DumpPropertyErrors(cPropSets, rgPropSets); FreeProperties(&cPropSets, &rgPropSets); return hr; } //-------------------------------------------------------------- // CCmdStream::DefTest // BOOL CCmdStream::DefTest(ICommandStream* pICS) { TBEGIN TESTC(pICS != NULL) TESTC(DefaultObjectTesting(pICS, COMMAND_INTERFACE)) CLEANUP: TRETURN } //-------------------------------------------------------------- // CCmdStream::VerifyRowset // BOOL CCmdStream::VerifyRowset(EQUERY eQuery, IRowset* pIR) { TBEGIN DBCOUNTITEM cRows = 0; DBCOUNTITEM ulIndex = 0; HROW hRow = 0; void* pData = NULL; CRowset* pcr = NULL; g_pIDBInitialize = m_pIDBInitialize; g_pIOpenRowset = m_pIOpenRowset; g_pTable = m_pTable; pcr = new CRowset(); TESTC(pcr != NULL) //Currently using this only for "select *" query. if(eQuery != SELECT_ALLFROMTBL) goto CLEANUP; cRows = m_pTable->CountRowsOnTable(); TESTC(SUCCEEDED(pcr->CreateRowset(pIR, SELECT_ALLFROMTBL))) for(ulIndex=0; ulIndexGetRow(ulIndex+1, &hRow), S_OK) TESTC_(pcr->GetRowData(hRow, &pData), S_OK) TESTC(pcr->CompareRowData(hRow, pData)) SAFE_FREE(pData); TESTC_(pcr->ReleaseRows(hRow), S_OK) } CLEANUP: g_pIDBInitialize = NULL; g_pIOpenRowset = NULL; g_pTable = NULL; SAFE_DELETE(pcr); SAFE_FREE(pData); TRETURN } //-------------------------------------------------------------- // CCmdStream::VerifyQuery1 // BOOL CCmdStream::VerifyQuery1(IUnknown* pIStream, REFIID riid) { TBEGIN HRESULT hr=E_FAIL; CLSID clsid; DBTYPE dbType; CCol rgCol; DOMNodeType nodeType; ULONG cRow = 1; WCHAR* wszData = NULL; WCHAR* pwszVal = NULL; WCHAR* pwszColName = NULL; IXMLDOMDocument* pXMLDoc = NULL; IXMLDOMNode* pNode = NULL; IXMLDOMNode* pRoot = NULL; IXMLDOMNode* pChild = NULL; IXMLDOMNode* pNext = NULL; VARIANT_BOOL bSuccess = VARIANT_FALSE; VARIANT streamIn; VariantInit(&streamIn); TESTC(pIStream != NULL) V_VT(&streamIn) = VT_UNKNOWN; V_UNKNOWN(&streamIn) = (ISequentialStream*)pIStream; pIStream->AddRef(); TESTC_(m_pTable->GetColInfo(1, rgCol), S_OK) dbType = rgCol.GetProviderType(); //TESTC_(hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, // IID_IXMLDOMDocument, (void**)&pXMLDoc), S_OK) CLSIDFromProgID(L"Msxml2.DOMDocument", &clsid); TESTC_(hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**)&pXMLDoc), S_OK) hr = pXMLDoc->load(streamIn, &bSuccess); if(bSuccess != VARIANT_TRUE) TESTC_(hr, S_OK) TESTC_(hr = pXMLDoc->QueryInterface(IID_IXMLDOMNode, (void **)&pNode), S_OK) //Find the first node of type NODE_ELEMENT, i.e. the //root node. TESTC_(hr = pNode->get_nodeType(&nodeType), S_OK) if(nodeType == NODE_ELEMENT) TESTC(QIDOMNode(pNode, &pRoot)) else { //Now recurse into any children... TESTC(SUCCEEDED(pNode->get_firstChild(&pChild))) while(pChild) { //Recurse for all siblings... TESTC_(hr = pChild->get_nodeType(&nodeType), S_OK) if(nodeType == NODE_ELEMENT) { TESTC(QIDOMNode(pChild, &pRoot)) break; } TESTC(SUCCEEDED(pChild->get_nextSibling(&pNext))) TESTC_(hr = pNext->get_nodeType(&nodeType), S_OK) if(nodeType == NODE_ELEMENT) { TESTC(QIDOMNode(pNext, &pRoot)) break; } SAFE_RELEASE(pChild); if(pNext) TESTC(QIDOMNode(pNext, &pChild)) SAFE_RELEASE(pNext); } } SAFE_RELEASE(pNode); SAFE_RELEASE(pChild); SAFE_RELEASE(pNext); SAFE_ALLOC(wszData, WCHAR, sizeof(WCHAR)*DATA_SIZE); TESTC(SUCCEEDED(pRoot->get_firstChild(&pChild))) while(pChild || cRow==1) { //Recurse for all siblings... TESTC_(hr = pChild->get_nodeType(&nodeType), S_OK) if(nodeType == NODE_ELEMENT) { hr = m_pTable->MakeData(wszData, cRow, 1, PRIMARY, DBTYPE_WSTR); GetAttrValue(pChild, &pwszColName, &pwszVal); COMPARE(wcscmp(wszData, pwszVal), 0); cRow++; memset(wszData, 0, sizeof(WCHAR)*DATA_SIZE); } TESTC(SUCCEEDED(pChild->get_nextSibling(&pNext))) SAFE_RELEASE(pChild); if(pNext) TESTC(QIDOMNode(pNext, &pChild)) SAFE_RELEASE(pNext); } CLEANUP: VariantClear(&streamIn); SAFE_FREE(wszData); SAFE_FREE(pwszVal); SAFE_FREE(pwszColName); SAFE_RELEASE(pXMLDoc); SAFE_RELEASE(pNode); SAFE_RELEASE(pChild); SAFE_RELEASE(pNext); SAFE_RELEASE(pRoot); TRETURN; } //-------------------------------------------------------------- // CCmdStream::QIDOMNode // BOOL CCmdStream::QIDOMNode(IXMLDOMNode* pIn, IXMLDOMNode** ppOut) { TBEGIN TESTC(pIn && ppOut) TESTC_(pIn->QueryInterface(IID_IXMLDOMNode, (void **)ppOut), S_OK) CLEANUP: TRETURN } //-------------------------------------------------------------- // CCmdStream::GetAttrValue // BOOL CCmdStream::GetAttrValue(IXMLDOMNode* pNode, WCHAR** ppwszName, WCHAR** ppwszVal) { TBEGIN VARIANT var; BSTR bstrName = NULL; IXMLDOMNamedNodeMap* pAttrs = NULL; IXMLDOMNode* pChild = NULL;; VariantInit(&var); TESTC(pNode && ppwszName && ppwszVal) TESTC(SUCCEEDED(pNode->get_attributes(&pAttrs))) TESTC(SUCCEEDED(pAttrs->nextNode(&pChild))) //Attribute name TESTC(SUCCEEDED(pChild->get_nodeName(&bstrName))) *ppwszName = wcsDuplicate(bstrName); //Attribute Value TESTC(SUCCEEDED(pChild->get_nodeValue(&var))) VariantChangeType(&var, &var, 0, DBTYPE_BSTR); *ppwszVal = wcsDuplicate(V_BSTR(&var)); CLEANUP: VariantClear(&var); SYSSTRING_FREE(bstrName); SAFE_RELEASE(pAttrs); SAFE_RELEASE(pChild); TRETURN } //-------------------------------------------------------------- // CCmdStream::VerifyQuery2 // BOOL CCmdStream::VerifyQuery2(IUnknown* pIStream, REFIID riid) { TBEGIN HRESULT hr=E_FAIL; WCHAR* pwszCmd = NULL; TESTC(pIStream != NULL) TESTC_(Read(&pwszCmd, pIStream), S_OK) TESTC(wcsstr(pwszCmd, m_pwszQ2) != NULL) CLEANUP: SAFE_FREE(pwszCmd); TRETURN; } //*----------------------------------------------------------------------- // Test Case Section //*----------------------------------------------------------------------- // {{ TCW_TEST_CASE_MAP(TCGetCmdStream) //*----------------------------------------------------------------------- // @class Test Case for GetCommandStream method // class TCGetCmdStream : public CCmdStream { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(TCGetCmdStream,CCmdStream); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember Verify the command object int Variation_1(); // @cmember DB_E_NOCOMMAND: Get on a fresh cmd object int Variation_2(); // @cmember S_OK: Set/Get ISequentialStream (unprep cmd) int Variation_3(); // @cmember S_OK: Set/Get IStream (unprep cmd) int Variation_4(); // @cmember S_OK: Set/Get ILockBytes (unprep cmd) int Variation_5(); // @cmember S_OK: Set/Get ISequentialStream (prep cmd) int Variation_6(); // @cmember S_OK: Set/Get IStream (prep cmd) int Variation_7(); // @cmember S_OK: Set/Get ILockBytes (prep cmd) int Variation_8(); // @cmember S_OK: Set/Get ISequentialStream (cmd props, optional) int Variation_9(); // @cmember S_OK: Set/Get ISequentialStream (cmd props, required) int Variation_10(); // @cmember S_OK: Set/Get IStream (cmd props) int Variation_11(); // @cmember S_OK: Set/Get ILockBytes (cmd props) int Variation_12(); // @cmember S_OK: Set, Execute (result open), Get int Variation_13(); // @cmember S_OK: Set, Execute (result release), Get int Variation_14(); // @cmember S_OK: Set/Get. Verify cmd stream object lifetime int Variation_15(); // @cmember S_OK: Overwrite command in stream got from GetCmdStream. int Variation_16(); // @cmember S_OK: SetCmdStream. Change underlying cmd. Execute. int Variation_17(); // @cmember S_OK: Set/Get unaffected by Abort transaction. int Variation_18(); // @cmember S_OK: CreateCommand with IID_ICommandStream. int Variation_19(); // @cmember S_OK: GetSpecification with IID_ICommandStream. int Variation_20(); // @cmember S_OK: Test stream got from GetCmdStream (seek, clone, read 1 byte at a time) int Variation_21(); // @cmember S_OK: GetCmdStream. Read partially. GetCmdStream. Read whole. int Variation_22(); // @cmember S_OK: Get ICommandStream on a ROW object's cmd obj. int Variation_23(); // @cmember S_OK: pGuidDialect is NULL int Variation_24(); // @cmember S_OK: piid is NULL int Variation_25(); // @cmember S_OK: piid & pGuidDialect are NULL int Variation_26(); // @cmember S_OK: Set/Get an empty stream int Variation_27(); // @cmember S_OK: Set/Get a very large stream int Variation_28(); // @cmember S_OK: test limitation of using ISequentialStream int Variation_29(); // @cmember S_OK: SetCmdStream, SetCmdStream, GetCmdStream int Variation_30(); // @cmember S_OK: SetCmdStream, SetCmdStream (different cmd), GetCmdStream int Variation_31(); // @cmember S_OK: SetCmdStream, SetCmdStream (different IID), GetCmdStream int Variation_32(); // @cmember S_OK: SetCmdStream, GetCmdStream, GetCmdStream int Variation_33(); // @cmember S_OK: SetCmdText, SetCmdStream, GetCmdText, GetCmdStream int Variation_34(); // @cmember S_OK: SetCmdStream, SetCmdText, GetCmdStream, GetCmdText int Variation_35(); // @cmember S_OK: SetCmdStream, SetCmdText (make call fail), GetCmdStream succeeds. int Variation_36(); // @cmember S_OK: SetCmdText, SetCmdStream (make call fail), GetCmdText succeeds. int Variation_37(); // @cmember DB_S_DIALECTIGNORED: Set and Get with different GUIDS int Variation_38(); // @cmember E_INVALIDARG: ppCommandStream is NULL int Variation_39(); // @cmember DB_E_NOCOMMAND: SetCmdStream, SetCmdStream(NULL), GetCmdStream int Variation_40(); // @cmember DB_E_NOCOMMAND: SetCmdStream, SetCmdText (NULL), GetCmdStream int Variation_41(); // @cmember DB_E_CANTTRANSLATE: SetCmdText, GetCmdStream int Variation_42(); // }} TCW_TESTVARS_END } ; // {{ TCW_TESTCASE(TCGetCmdStream) #define THE_CLASS TCGetCmdStream BEG_TEST_CASE(TCGetCmdStream, CCmdStream, L"Test Case for GetCommandStream method") TEST_VARIATION(1, L"Verify the command object") TEST_VARIATION(2, L"DB_E_NOCOMMAND: Get on a fresh cmd object") TEST_VARIATION(3, L"S_OK: Set/Get ISequentialStream (unprep cmd)") TEST_VARIATION(4, L"S_OK: Set/Get IStream (unprep cmd)") TEST_VARIATION(5, L"S_OK: Set/Get ILockBytes (unprep cmd)") TEST_VARIATION(6, L"S_OK: Set/Get ISequentialStream (prep cmd)") TEST_VARIATION(7, L"S_OK: Set/Get IStream (prep cmd)") TEST_VARIATION(8, L"S_OK: Set/Get ILockBytes (prep cmd)") TEST_VARIATION(9, L"S_OK: Set/Get ISequentialStream (cmd props, optional)") TEST_VARIATION(10, L"S_OK: Set/Get ISequentialStream (cmd props, required)") TEST_VARIATION(11, L"S_OK: Set/Get IStream (cmd props)") TEST_VARIATION(12, L"S_OK: Set/Get ILockBytes (cmd props)") TEST_VARIATION(13, L"S_OK: Set, Execute (result open), Get") TEST_VARIATION(14, L"S_OK: Set, Execute (result release), Get") TEST_VARIATION(15, L"S_OK: Set/Get. Verify cmd stream object lifetime") TEST_VARIATION(16, L"S_OK: Overwrite command in stream got from GetCmdStream.") TEST_VARIATION(17, L"S_OK: SetCmdStream. Change underlying cmd. Execute.") TEST_VARIATION(18, L"S_OK: Set/Get unaffected by Abort transaction.") TEST_VARIATION(19, L"S_OK: CreateCommand with IID_ICommandStream.") TEST_VARIATION(20, L"S_OK: GetSpecification with IID_ICommandStream.") TEST_VARIATION(21, L"S_OK: Test stream got from GetCmdStream (seek, clone, read 1 byte at a time)") TEST_VARIATION(22, L"S_OK: GetCmdStream. Read partially. GetCmdStream. Read whole.") TEST_VARIATION(23, L"S_OK: Get ICommandStream on a ROW object's cmd obj.") TEST_VARIATION(24, L"S_OK: pGuidDialect is NULL") TEST_VARIATION(25, L"S_OK: piid is NULL") TEST_VARIATION(26, L"S_OK: piid & pGuidDialect are NULL") TEST_VARIATION(27, L"S_OK: Set/Get an empty stream") TEST_VARIATION(28, L"S_OK: Set/Get a very large stream") TEST_VARIATION(29, L"S_OK: test limitation of using ISequentialStream") TEST_VARIATION(30, L"S_OK: SetCmdStream, SetCmdStream, GetCmdStream") TEST_VARIATION(31, L"S_OK: SetCmdStream, SetCmdStream (different cmd), GetCmdStream") TEST_VARIATION(32, L"S_OK: SetCmdStream, SetCmdStream (different IID), GetCmdStream") TEST_VARIATION(33, L"S_OK: SetCmdStream, GetCmdStream, GetCmdStream") TEST_VARIATION(34, L"S_OK: SetCmdText, SetCmdStream, GetCmdText, GetCmdStream") TEST_VARIATION(35, L"S_OK: SetCmdStream, SetCmdText, GetCmdStream, GetCmdText") TEST_VARIATION(36, L"S_OK: SetCmdStream, SetCmdText (make call fail), GetCmdStream succeeds.") TEST_VARIATION(37, L"S_OK: SetCmdText, SetCmdStream (make call fail), GetCmdText succeeds.") TEST_VARIATION(38, L"DB_S_DIALECTIGNORED: Set and Get with different GUIDS") TEST_VARIATION(39, L"E_INVALIDARG: ppCommandStream is NULL") TEST_VARIATION(40, L"DB_E_NOCOMMAND: SetCmdStream, SetCmdStream(NULL), GetCmdStream") TEST_VARIATION(41, L"DB_E_NOCOMMAND: SetCmdStream, SetCmdText (NULL), GetCmdStream") TEST_VARIATION(42, L"DB_E_CANTTRANSLATE: SetCmdText, GetCmdStream") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // {{ TCW_TEST_CASE_MAP(TCSetCmdStream) //*----------------------------------------------------------------------- // @class SetCommandStream Test Case // class TCSetCmdStream : public CCmdStream { private: // @cmember Static array of variations DECLARE_TEST_CASE_DATA(); public: // {{ TCW_DECLARE_FUNCS // @cmember Execution Routine DECLARE_TEST_CASE_FUNCS(TCSetCmdStream,CCmdStream); // }} TCW_DECLARE_FUNCS_END // @cmember Initialization Routine virtual BOOL Init(); // @cmember Termination Routine virtual BOOL Terminate(); // {{ TCW_TESTVARS() // @cmember S_OK: Set cmd props. SetCmdStream. Execute. int Variation_1(); // @cmember S_OK: Execute CmdText, release rowset, SetCmdStream int Variation_2(); // @cmember S_OK: Set/Get/Execute. Verify cmd stream object lifetime int Variation_3(); // @cmember S_OK: Execute some privlib queries and verify. int Variation_4(); // @cmember S_OK: pCommandStream is NULL (cmd state reset) int Variation_5(); // @cmember S_OK: SetCmdStream with stream containing 2 cmds. Ptr on 2nd. int Variation_6(); // @cmember S_OK: SetCmdStream & Execute diffr queries on diffr cmd objs. int Variation_7(); // @cmember S_OK: SetCmdStream, Prepare, GetColInfo. int Variation_8(); // @cmember S_OK: SetCmdStream, Prepare, GetColumnsRowset. int Variation_9(); // @cmember S_OK: Implement stream on a large file. SetCmdStream. int Variation_10(); // @cmember S_OK: Aggregate stream got from Execute. int Variation_11(); // @cmember DB_E_ERRORSINCOMMAND: SetCmdStream with an embedded NULL terminator. int Variation_12(); // @cmember DB_E_ERRORSINCOMMAND: Set unicode stream without BOM int Variation_13(); // @cmember S_OK: Set stream as ansi - no BOM int Variation_14(); // @cmember S_OK: Set DBPROP_DEFERRED. int Variation_15(); // @cmember S_OK: Call SetCmdStream so it fails. Ref cnt unchanged. int Variation_16(); // @cmember S_OK: Release all objects & verify no ref cnts left on stream. int Variation_17(); // @cmember S_OK: SetCmdStream, GetCmdStream, SetCmdStream with stream got. Execute. int Variation_18(); // @cmember S_OK: SetCmdStream, Execute, GetCmdStream int Variation_19(); // @cmember S_OK: SetCmdStream, GetCmdStream, Execute int Variation_20(); // @cmember S_OK: SetCmdStream, Execute, Execute int Variation_21(); // @cmember S_OK: SetCmdText, SetCmdStream, Execute int Variation_22(); // @cmember S_OK: SetCmdStream, GetCmdStream, SetCmdText, Execute. Read got stream. int Variation_23(); // @cmember S_OK: Ask for IUnknown on Execute. int Variation_24(); // @cmember DBPROP_OUTPUTSTREAM - ISequentialStream int Variation_25(); // @cmember DBPROP_OUTPUTSTREAM - ISequentialStream (NULL ppRowset) int Variation_26(); // @cmember DBPROP_OUTPUTSTREAM - IStream int Variation_27(); // @cmember DBPROP_OUTPUTENCODING - UTF-8 int Variation_28(); // @cmember DBPROP_OUTPUTENCODING - UTF-16 int Variation_29(); // @cmember E_NOINTERFACE: iid passed in does not match object int Variation_30(); // @cmember E_NOINTERFACE: iid is IRowset & IRow. int Variation_31(); // @cmember DB_E_CANTTRANSLATE: SetCmdStream, GetCmdText int Variation_32(); // @cmember DB_E_DIALECTNOTSUPPORTED: Use some bugs guids & DBGUID_NULL int Variation_33(); // @cmember DB_E_DIALECTNOTSUPPORTED (or S_OK): use DBGUID_SQL. int Variation_34(); // @cmember DB_E_OBJECTOPEN: Keeping a result stream open, call Set. int Variation_35(); // @cmember Clear previous error object. int Variation_36(); // @cmember Extended error test - GetCmdStream int Variation_37(); // @cmember Extended error test - SetCmdStream int Variation_38(); // }} TCW_TESTVARS_END } ; // {{ TCW_TESTCASE(TCSetCmdStream) #define THE_CLASS TCSetCmdStream BEG_TEST_CASE(TCSetCmdStream, CCmdStream, L"SetCommandStream Test Case") TEST_VARIATION(1, L"S_OK: Set cmd props. SetCmdStream. Execute.") TEST_VARIATION(2, L"S_OK: Execute CmdText, release rowset, SetCmdStream") TEST_VARIATION(3, L"S_OK: Set/Get/Execute. Verify cmd stream object lifetime") TEST_VARIATION(4, L"S_OK: Execute some privlib queries and verify.") TEST_VARIATION(5, L"S_OK: pCommandStream is NULL (cmd state reset)") TEST_VARIATION(6, L"S_OK: SetCmdStream with stream containing 2 cmds. Ptr on 2nd.") TEST_VARIATION(7, L"S_OK: SetCmdStream & Execute diffr queries on diffr cmd objs.") TEST_VARIATION(8, L"S_OK: SetCmdStream, Prepare, GetColInfo.") TEST_VARIATION(9, L"S_OK: SetCmdStream, Prepare, GetColumnsRowset.") TEST_VARIATION(10, L"S_OK: Implement stream on a large file. SetCmdStream.") TEST_VARIATION(11, L"S_OK: Aggregate stream got from Execute.") TEST_VARIATION(12, L"DB_E_ERRORSINCOMMAND: SetCmdStream with an embedded NULL terminator.") TEST_VARIATION(13, L"DB_E_ERRORSINCOMMAND: Set unicode stream without BOM") TEST_VARIATION(14, L"S_OK: Set stream as ansi - no BOM") TEST_VARIATION(15, L"S_OK: Set DBPROP_DEFERRED.") TEST_VARIATION(16, L"S_OK: Call SetCmdStream so it fails. Ref cnt unchanged.") TEST_VARIATION(17, L"S_OK: Release all objects & verify no ref cnts left on stream.") TEST_VARIATION(18, L"S_OK: SetCmdStream, GetCmdStream, SetCmdStream with stream got. Execute.") TEST_VARIATION(19, L"S_OK: SetCmdStream, Execute, GetCmdStream") TEST_VARIATION(20, L"S_OK: SetCmdStream, GetCmdStream, Execute") TEST_VARIATION(21, L"S_OK: SetCmdStream, Execute, Execute") TEST_VARIATION(22, L"S_OK: SetCmdText, SetCmdStream, Execute") TEST_VARIATION(23, L"S_OK: SetCmdStream, GetCmdStream, SetCmdText, Execute. Read got stream.") TEST_VARIATION(24, L"S_OK: Ask for IUnknown on Execute.") TEST_VARIATION(25, L"DBPROP_OUTPUTSTREAM - ISequentialStream") TEST_VARIATION(26, L"DBPROP_OUTPUTSTREAM - ISequentialStream (NULL ppRowset)") TEST_VARIATION(27, L"DBPROP_OUTPUTSTREAM - IStream") TEST_VARIATION(28, L"DBPROP_OUTPUTENCODING - UTF-8") TEST_VARIATION(29, L"DBPROP_OUTPUTENCODING - UTF-16") TEST_VARIATION(30, L"E_NOINTERFACE: iid passed in does not match object") TEST_VARIATION(31, L"E_NOINTERFACE: iid is IRowset & IRow.") TEST_VARIATION(32, L"DB_E_CANTTRANSLATE: SetCmdStream, GetCmdText") TEST_VARIATION(33, L"DB_E_DIALECTNOTSUPPORTED: Use some bugs guids & DBGUID_NULL") TEST_VARIATION(34, L"DB_E_DIALECTNOTSUPPORTED (or S_OK): use DBGUID_SQL.") TEST_VARIATION(35, L"DB_E_OBJECTOPEN: Keeping a result stream open, call Set.") TEST_VARIATION(36, L"Clear previous error object.") TEST_VARIATION(37, L"Extended error test - GetCmdStream") TEST_VARIATION(38, L"Extended error test - SetCmdStream") END_TEST_CASE() #undef THE_CLASS // }} TCW_TESTCASE_END // }} TCW_TEST_CASE_MAP_END // }} END_DECLARE_TEST_CASES() // {{ TCW_TESTMODULE(ThisModule) TEST_MODULE(2, ThisModule, gwszModuleDescrip) TEST_CASE(1, TCGetCmdStream) TEST_CASE(2, TCSetCmdStream) END_TEST_MODULE() // }} TCW_TESTMODULE_END // {{ TCW_TC_PROTOTYPE(TCGetCmdStream) //*----------------------------------------------------------------------- //| Test Case: TCGetCmdStream - Test Case for GetCommandStream method //| Created: 10/26/1999 //*----------------------------------------------------------------------- //*----------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL TCGetCmdStream::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CCmdStream::Init()) // }} { // TO DO: Add your own code here return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc Verify the command object // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_1() { TBEGIN TESTC(DefaultObjectTesting(m_pICommandStream, COMMAND_INTERFACE)) CLEANUP: TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc DB_E_NOCOMMAND: Get on a fresh cmd object // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_2() { TBEGIN HRESULT hr = E_FAIL; IID iid = IID_IAccessor; GUID guid = DBGUID_DEFAULT; TESTC_(hr = GetCmdStream(&iid, &guid), DB_E_NOCOMMAND) CLEANUP: RELEASE_GETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc S_OK: Set/Get ISequentialStream (unprep cmd) // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_3() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; NAMEMAP* rgSQLTokens = NULL; ULONG cSQLTokens = GetSQLTokenMap(&rgSQLTokens); //Loop through all the possible Queries... for(ULONG i=0; iCreateSQLStmt((EQUERY)rgSQLTokens[i].lItem, m_pTable->GetTableName(), &pwszSQL), S_OK, E_OUTOFMEMORY) if(hr != S_OK) { odtLog<CreateSQLStmt((EQUERY)rgSQLTokens[i].lItem, m_pTable->GetTableName(), &pwszSQL), S_OK, E_OUTOFMEMORY) if(hr != S_OK) { odtLog<CreateSQLStmt((EQUERY)rgSQLTokens[i].lItem, m_pTable->GetTableName(), &pwszSQL), S_OK, E_OUTOFMEMORY) if(hr != S_OK) { odtLog<CreateSQLStmt((EQUERY)rgSQLTokens[i].lItem, m_pTable->GetTableName(), &pwszSQL) != S_OK) continue; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) //Prepare the command. TESTC(PrepCmd()) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_ISequentialStream); TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; } CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc S_OK: Set/Get IStream (prep cmd) // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_7() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; NAMEMAP* rgSQLTokens = NULL; ULONG cSQLTokens = GetSQLTokenMap(&rgSQLTokens); //Loop through all the possible Queries... for(ULONG i=0; iCreateSQLStmt((EQUERY)rgSQLTokens[i].lItem, m_pTable->GetTableName(), &pwszSQL) != S_OK) continue; //IID_IStream may not be supported. TEST2C_(hr = SetCmdStream(IID_IStream, DBGUID_DEFAULT, pwszSQL), S_OK, E_NOINTERFACE) TESTC_PROVIDER(hr == S_OK) //Prepare the command. TESTC(PrepCmd()) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_IStream); TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; } CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc S_OK: Set/Get ILockBytes (prep cmd) // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_8() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; NAMEMAP* rgSQLTokens = NULL; ULONG cSQLTokens = GetSQLTokenMap(&rgSQLTokens); //Loop through all the possible Queries... for(ULONG i=0; iCreateSQLStmt((EQUERY)rgSQLTokens[i].lItem, m_pTable->GetTableName(), &pwszSQL) != S_OK) continue; //IID_IStream may not be supported. TEST2C_(hr = SetCmdStream(IID_ILockBytes, DBGUID_DEFAULT, pwszSQL), S_OK, E_NOINTERFACE) TESTC_PROVIDER(hr == S_OK) //Prepare the command. TESTC(PrepCmd()) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_ILockBytes); TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; } CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc S_OK: Set/Get ISequentialStream (cmd props, optional) // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_9() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; ULONG cPropSets = 0; DBPROPSET* rgPropSets = NULL; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; NAMEMAP* rgSQLTokens = NULL; ULONG cSQLTokens = GetSQLTokenMap(&rgSQLTokens); SetProperty(DBPROP_IRowsetLocate, DBPROPSET_ROWSET, &cPropSets, &rgPropSets, (void*)VARIANT_TRUE, DBTYPE_BOOL, DBPROPOPTIONS_OPTIONAL); SetProperty(DBPROP_IRowsetChange, DBPROPSET_ROWSET, &cPropSets, &rgPropSets, (void*)VARIANT_TRUE, DBTYPE_BOOL, DBPROPOPTIONS_OPTIONAL); SetProperty(DBPROP_UPDATABILITY, DBPROPSET_ROWSET, &cPropSets, &rgPropSets, (void*)(DBPROPVAL_UP_CHANGE|DBPROPVAL_UP_DELETE|DBPROPVAL_UP_INSERT), DBTYPE_I4, DBPROPOPTIONS_OPTIONAL); hr = SetCmdProp(rgPropSets); COMPARE(hr==S_OK || hr==DB_S_ERRORSOCCURRED, TRUE); ULONG i; //Loop through all the possible Queries... for(i=0; iCreateSQLStmt((EQUERY)rgSQLTokens[i].lItem, m_pTable->GetTableName(), &pwszSQL) != S_OK) continue; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_ISequentialStream); TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; } CLEANUP: //unset the 3 properties which were set above. for(i=0; i<3; i++) VariantClear(&rgPropSets[0].rgProperties[i].vValue); SetCmdProp(rgPropSets); FreeProperties(&cPropSets, &rgPropSets); SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc S_OK: Set/Get ISequentialStream (cmd props, required) // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_10() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; ULONG cPropSets = 0; DBPROPSET* rgPropSets = NULL; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; NAMEMAP* rgSQLTokens = NULL; ULONG cSQLTokens = GetSQLTokenMap(&rgSQLTokens); SetProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, &cPropSets, &rgPropSets); SetProperty(DBPROP_CANFETCHBACKWARDS, DBPROPSET_ROWSET, &cPropSets, &rgPropSets); SetProperty(DBPROP_CANHOLDROWS, DBPROPSET_ROWSET, &cPropSets, &rgPropSets); hr = SetCmdProp(rgPropSets); COMPARE(hr==S_OK || hr==DB_E_ERRORSOCCURRED, TRUE); ULONG i; //Loop through all the possible Queries... for(i=0; iCreateSQLStmt((EQUERY)rgSQLTokens[i].lItem, m_pTable->GetTableName(), &pwszSQL) != S_OK) continue; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_ISequentialStream); TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; } CLEANUP: //unset the 3 properties which were set above. for(i=0; i<3; i++) VariantClear(&rgPropSets[0].rgProperties[i].vValue); SetCmdProp(rgPropSets); FreeProperties(&cPropSets, &rgPropSets); SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc S_OK: Set/Get IStream (cmd props) // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_11() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; ULONG cPropSets = 0; DBPROPSET* rgPropSets = NULL; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; NAMEMAP* rgSQLTokens = NULL; ULONG cSQLTokens = GetSQLTokenMap(&rgSQLTokens); SetProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, &cPropSets, &rgPropSets); SetProperty(DBPROP_CANFETCHBACKWARDS, DBPROPSET_ROWSET, &cPropSets, &rgPropSets, (void*)VARIANT_TRUE, DBTYPE_BOOL, DBPROPOPTIONS_OPTIONAL); SetProperty(DBPROP_CANHOLDROWS, DBPROPSET_ROWSET, &cPropSets, &rgPropSets); hr = SetCmdProp(rgPropSets); COMPARE(hr==S_OK || hr==DB_S_ERRORSOCCURRED || hr==DB_E_ERRORSOCCURRED, TRUE); ULONG i; //Loop through all the possible Queries... for(i=0; iCreateSQLStmt((EQUERY)rgSQLTokens[i].lItem, m_pTable->GetTableName(), &pwszSQL) != S_OK) continue; TEST2C_(hr = SetCmdStream(IID_IStream, DBGUID_DEFAULT, pwszSQL), S_OK, E_NOINTERFACE) TESTC_PROVIDER(hr == S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_IStream); TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; } CLEANUP: //unset the 3 properties which were set above. for(i=0; i<3; i++) VariantClear(&rgPropSets[0].rgProperties[i].vValue); SetCmdProp(rgPropSets); FreeProperties(&cPropSets, &rgPropSets); SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc S_OK: Set/Get ILockBytes (cmd props) // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_12() { TBEGIN ULONG i=0; HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; ULONG cPropSets = 0; DBPROPSET* rgPropSets = NULL; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; NAMEMAP* rgSQLTokens = NULL; ULONG cSQLTokens = GetSQLTokenMap(&rgSQLTokens); SetProperty(DBPROP_IRowsetIdentity, DBPROPSET_ROWSET, &cPropSets, &rgPropSets); SetProperty(DBPROP_IRowsetFind, DBPROPSET_ROWSET, &cPropSets, &rgPropSets, (void*)VARIANT_TRUE, DBTYPE_BOOL, DBPROPOPTIONS_OPTIONAL); SetProperty(DBPROP_CANHOLDROWS, DBPROPSET_ROWSET, &cPropSets, &rgPropSets); hr = SetCmdProp(rgPropSets); COMPARE(hr==S_OK || hr==DB_S_ERRORSOCCURRED || hr==DB_E_ERRORSOCCURRED, TRUE); //Loop through all the possible Queries... for(i=0; iCreateSQLStmt((EQUERY)rgSQLTokens[i].lItem, m_pTable->GetTableName(), &pwszSQL) != S_OK) continue; TEST2C_(hr = SetCmdStream(IID_ILockBytes, DBGUID_DEFAULT, pwszSQL), S_OK, E_NOINTERFACE) TESTC_PROVIDER(hr == S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_ILockBytes); TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; } CLEANUP: //unset the 3 properties which were set above. for(i=0; i<3; i++) VariantClear(&rgPropSets[0].rgProperties[i].vValue); SetCmdProp(rgPropSets); FreeProperties(&cPropSets, &rgPropSets); SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc S_OK: Set, Execute (result open), Get // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_13() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQLGet = NULL; ISequentialStream* pISS = NULL; WCHAR* pwszCmd = NULL; ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) TESTC_(hr = m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) TESTC(pwszSQLGet!=NULL) TESTC(wcscmp(m_pwszQ1, pwszSQLGet) == 0) CLEANUP: SAFE_FREE(pwszSQLGet); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc S_OK: Set, Execute (result release), Get // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_14() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQLGet = NULL; ISequentialStream* pISS = NULL; ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) TESTC_(hr = m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) SAFE_RELEASE(pISS); TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) TESTC(pwszSQLGet!=NULL) TESTC(wcscmp(m_pwszQ1, pwszSQLGet) == 0) CLEANUP: SAFE_FREE(pwszSQLGet); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc S_OK: Set/Get. Verify cmd stream object lifetime // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_15() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid; ULONG cRef1=0, cRef2=0, cRef3=0; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; ALLOC_SETSTG; cRef1 = m_pStorageSet->GetRefCount(); TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) cRef2 = m_pStorageSet->GetRefCount(); COMPARE(cRef2 > cRef1, TRUE); TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) cRef3 = m_pStorageSet->GetRefCount(); COMPARE(cRef3 > cRef2, TRUE); COMPARE(pwszSQL && pwszSQLGet, TRUE); COMPARE(wcscmp(pwszSQL, pwszSQLGet), 0); m_pStorageGet->Release(); COMPARE(cRef2, m_pStorageGet->GetRefCount()); m_pStorageGet = NULL; m_pStorageSet->Release(); COMPARE(cRef1, m_pStorageSet->GetRefCount()); m_pStorageSet = NULL; CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_SETSTG; RELEASE_GETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc S_OK: Overwrite command in stream got from GetCmdStream. // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_16() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQLGet = NULL; WCHAR* pwszStream = NULL; ULONG cWrote = 0; ULONG ulLen = 0; ISequentialStream* pISS = NULL; ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, NULL), S_OK) //Overwrite command in the m_pStorageGet stream. ulLen = (ULONG)wcslen(m_pwszQ2); TESTC_(hr = m_pStorageGet->Write(wszByteOrder, 2, NULL), S_OK); TESTC_(hr = m_pStorageGet->Write(m_pwszQ2, (ulLen)*sizeof(WCHAR), &cWrote), S_OK); m_pStorageGet->Seek(0); TESTC_(hr = m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) CLEANUP: SAFE_FREE(pwszSQLGet); SAFE_FREE(pwszStream); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdStream. Change underlying cmd. Execute. // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_17() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; WCHAR* pwszSQLGet = NULL; ISequentialStream* pISS = NULL; ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) //Overwrite the stream that was set with another cmd. TESTC_(Write(m_pwszQ2), S_OK) TESTC_(hr = m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) CLEANUP: SAFE_FREE(pwszSQLGet); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc S_OK: Set/Get unaffected by Abort transaction. // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_18() { TBEGIN HRESULT hr = E_FAIL; ULONG ulTLevel = 0; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; ITransactionLocal* pITL = NULL; ALLOC_SETSTG; TESTC_PROVIDER(VerifyInterface(m_pIOpenRowset, IID_ITransactionLocal, SESSION_INTERFACE,(IUnknown **)&pITL)) TESTC_(pITL->StartTransaction(ISOLATIONLEVEL_READUNCOMMITTED,0,NULL,&ulTLevel), S_OK) TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(pITL->Abort(NULL, FALSE,NULL), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_ISequentialStream); TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); SAFE_RELEASE(pITL); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc S_OK: CreateCommand with IID_ICommandStream. // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_19() { TBEGIN IDBCreateCommand* pIDBCC = NULL; ICommandStream* pICS = NULL; ICommandText* pICT = NULL; TESTC(VerifyInterface(m_pIOpenRowset, IID_IDBCreateCommand, SESSION_INTERFACE,(IUnknown **)&pIDBCC)) TESTC_(pIDBCC->CreateCommand(NULL, IID_ICommandStream, (IUnknown**)&pICS), S_OK) TESTC(DefTest(pICS)) TESTC(VerifyInterface(pICS, IID_ICommandText, COMMAND_INTERFACE,(IUnknown **)&pICT)) TESTC(DefaultInterfaceTesting(pICT, COMMAND_INTERFACE, IID_ICommandText)) CLEANUP: SAFE_RELEASE(pIDBCC); SAFE_RELEASE(pICS); SAFE_RELEASE(pICT); TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc S_OK: GetSpecification with IID_ICommandStream. // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_20() { TBEGIN IRowsetInfo* pIRI = NULL; ICommandStream* pICS = NULL; TESTC_(m_pTable->ExecuteCommand(SELECT_ALLFROMTBL, IID_IRowsetInfo, NULL, NULL, NULL, NULL, EXECUTE_IFNOERROR, 0, NULL, NULL, (IUnknown**)&pIRI, (ICommand**)&m_pICommandText), S_OK) TESTC(pIRI != NULL) TESTC_(pIRI->GetSpecification(IID_ICommandStream, (IUnknown**)&pICS), S_OK) TESTC(DefTest(pICS)) CLEANUP: SAFE_RELEASE(pIRI); SAFE_RELEASE(pICS); TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc S_OK: Test stream got from GetCmdStream (seek, clone, read 1 byte at a time) // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_21() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; ULONG cRead = 0; ULONG ulReadIncr = 1; BYTE* pwszEnd = NULL; BOOL fEnd = FALSE; IStream* pClone = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_PROVIDER(SetCmdStream(IID_IStream, DBGUID_DEFAULT, pwszSQL) == S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, NULL), S_OK) COMPARE(iid, IID_IStream); SAFE_ALLOC(pwszSQLGet, WCHAR, READ_INCR); //----------------------------------------------------- //Read 1 byte at a time. //----------------------------------------------------- hr = m_pStorageGet->Read(pwszSQLGet, 2, &cRead); if(cRead==2) { if(memcmp(wszByteOrder, pwszSQLGet, 2) == 0) { hr = m_pStorageGet->Read(pwszSQLGet, 1, &cRead); hr = m_pStorageGet->Read((BYTE*)pwszSQLGet+1, 1, &cRead); } } //Read only 1 byte at a time. while(!fEnd) { cRead = 0; ulReadIncr += 1; if((ulReadIncr/2 > READ_INCR) && !(ulReadIncr%2)) SAFE_REALLOC(pwszSQLGet, WCHAR, READ_INCR+ulReadIncr/2); hr = m_pStorageGet->Read((BYTE*)pwszSQLGet+ulReadIncr, 1, &cRead); if(cRead < 1) { fEnd = TRUE; pwszEnd = (BYTE*)pwszSQLGet +ulReadIncr; } } memset((BYTE*)pwszEnd, 0, 2); COMPARE(wcscmp(pwszSQL, pwszSQLGet), 0); SAFE_FREE(pwszSQLGet); ulReadIncr = 1; cRead = 0; //----------------------------------------------------- // CLONE stream. Read cloned stream. //----------------------------------------------------- TEST2C_(hr = m_pStorageGet->Clone(&pClone), S_OK, E_NOTIMPL) if(hr != S_OK) { odtLog<Seek(0), S_OK) TESTC_(Read(&pwszSQLGet, (ISequentialStream*)m_pStorageGet), S_OK) COMPARE(wcscmp(pwszSQL, pwszSQLGet), 0); CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); SAFE_RELEASE(pClone); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc S_OK: GetCmdStream. Read partially. GetCmdStream. Read whole. // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_22() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; WCHAR* pwszSQLGet2 = NULL; ULONG cRead = 0; ULONG ulReadIncr = 1; ISequentialStream* pISS = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, NULL), S_OK) SAFE_ALLOC(pwszSQLGet, WCHAR, 3000); //Read first stream partially. hr = m_pStorageGet->Read(pwszSQLGet, 4, &cRead); //Get another stream and read it fully. TEST2C_(hr = m_pICommandStream->GetCommandStream(&iid, &guid, (IUnknown**)&pISS), S_OK, DB_S_DIALECTIGNORED) TESTC_(Read(&pwszSQLGet, pISS), S_OK) COMPARE(wcscmp(pwszSQL, pwszSQLGet), 0); CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); SAFE_FREE(pwszSQLGet2); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc S_OK: Get ICommandStream on a ROW object's cmd obj. // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_23() { TBEGIN HRESULT hr = E_FAIL; ULONG cProps = 0; DBPROPSET* rgProps = NULL; IDBCreateCommand* pIDBCC = NULL; ICommandStream* pICS = NULL; SetProperty(DBPROP_IRow, DBPROPSET_ROWSET, &cProps, &rgProps); TEST3C_(hr = m_pIOpenRowset->OpenRowset(NULL, &(m_pTable->GetTableID()), NULL, IID_IDBCreateCommand, cProps, rgProps, (IUnknown **)&pIDBCC), S_OK, E_NOINTERFACE, DB_E_ERRORSOCCURRED) TESTC_PROVIDER(hr == S_OK) TESTC_(pIDBCC->CreateCommand(NULL, IID_ICommandStream, (IUnknown**)&pICS), S_OK) TESTC(DefTest(pICS)) CLEANUP: FreeProperties(&cProps, &rgProps); SAFE_RELEASE(pIDBCC); SAFE_RELEASE(pICS); TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc S_OK: pGuidDialect is NULL // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_24() { TBEGIN HRESULT hr = E_FAIL; IID iid; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = GetCmdStream(&iid, NULL, &pwszSQLGet), S_OK) COMPARE(pwszSQL && pwszSQLGet, TRUE); COMPARE(wcscmp(pwszSQL, pwszSQLGet), 0); CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_SETSTG; RELEASE_GETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc S_OK: piid is NULL // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_25() { TBEGIN HRESULT hr = E_FAIL; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = GetCmdStream(NULL, &guid, &pwszSQLGet), S_OK) COMPARE(pwszSQL && pwszSQLGet, TRUE); COMPARE(wcscmp(pwszSQL, pwszSQLGet), 0); CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_SETSTG; RELEASE_GETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc S_OK: piid & pGuidDialect are NULL // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_26() { TBEGIN HRESULT hr = E_FAIL; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = GetCmdStream(NULL, NULL, &pwszSQLGet), S_OK) COMPARE(pwszSQL && pwszSQLGet, TRUE); COMPARE(wcscmp(pwszSQL, pwszSQLGet), 0); CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_SETSTG; RELEASE_GETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc S_OK: Set/Get an empty stream // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_27() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; ULONG cRead = 0; WCHAR* pwszSQLGet; ALLOC_SETSTG; //Create the stream object, but don't write to it. TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(pwszSQLGet, NULL); //Create the stream object, but don't write to it. TEST2C_(hr = SetCmdStream(IID_IStream, DBGUID_DEFAULT, NULL), S_OK, E_NOINTERFACE) if(hr == S_OK) { TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(pwszSQLGet, NULL); } //Create the stream object, but don't write to it. TEST2C_(hr = SetCmdStream(IID_ILockBytes, DBGUID_DEFAULT, NULL), S_OK, E_NOINTERFACE) if(hr == S_OK) { TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(pwszSQLGet, NULL); } CLEANUP: SAFE_FREE(pwszSQLGet); RELEASE_SETSTG; RELEASE_GETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc S_OK: Set/Get a very large stream // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_28() { TBEGIN HRESULT hr = E_FAIL; ULONG i; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; WCHAR* pwszSQLLong = NULL; ULONG cWrote = 0; ULONG ulLen = 0; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_COLLISTFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) ulLen = (ULONG)wcslen(pwszSQL); hr = m_pStorageSet->Write(wszByteOrder, 2, NULL); for(i=0; i<100; i++) hr = m_pStorageSet->Write(pwszSQL, (ulLen)*sizeof(WCHAR), &cWrote); hr = m_pStorageSet->Write(pwszSQL, (ulLen)*sizeof(WCHAR), &cWrote); m_pStorageSet->Seek(0); SAFE_ALLOC(pwszSQLLong, WCHAR, (101*ulLen)+1); wcscpy(pwszSQLLong, pwszSQL); for(i=0; i<100; i++) wcscat(pwszSQLLong, pwszSQL); TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT), S_OK) TESTC_(hr = GetCmdStream(NULL, &guid, &pwszSQLGet), S_OK) TESTC(pwszSQLLong && pwszSQLGet) COMPARE(wcscmp(pwszSQLLong, pwszSQLGet), 0); CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLLong); SAFE_FREE(pwszSQLGet); RELEASE_SETSTG; RELEASE_GETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc S_OK: test limitation of using ISequentialStream // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_29() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; ISequentialStream* pIS1 = NULL; ISequentialStream* pIS2 = NULL; ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ2), S_OK) TESTC_(hr = m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pIS1), S_OK) //Verify that query2 was executed. TESTC(VerifyQuery2(pIS1, IID_ISequentialStream)) TEST2C_(hr = m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pIS2), S_OK, DB_E_ERRORSINCOMMAND) //Verify that query2 was executed. if(hr == S_OK) { TESTC(VerifyQuery2(pIS2, IID_ISequentialStream)) odtLog<CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_ISequentialStream); TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(31) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdStream, SetCmdStream (different cmd), GetCmdStream // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_31() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) SAFE_FREE(pwszSQL); RELEASE_SETSTG; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_COLLISTFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_ISequentialStream); TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(32) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdStream, SetCmdStream (different IID), GetCmdStream // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_32() { TBEGIN HRESULT hr = E_FAIL; HRESULT hrSet = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; WCHAR* pwszSQL2 = NULL; WCHAR* pwszSQLGet = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_COLLISTFROMTBL, m_pTable->GetTableName(), &pwszSQL2), S_OK) RELEASE_SETSTG; ALLOC_SETSTG; TEST2C_(hrSet = SetCmdStream(IID_ILockBytes, DBGUID_DEFAULT, pwszSQL2), S_OK, E_NOINTERFACE) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) if(hrSet == S_OK) { COMPARE(iid, IID_ILockBytes); TESTC(pwszSQL2 && pwszSQLGet) TESTC(wcscmp(pwszSQL2, pwszSQLGet) == 0) } else { COMPARE(iid, IID_ISequentialStream); TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) } CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQL2); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(33) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdStream, GetCmdStream, GetCmdStream // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_33() { TBEGIN HRESULT hr = E_FAIL; ULONG i; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) for(i=0; i<5; i++) { TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_ISequentialStream); TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) RELEASE_GETSTG; SAFE_FREE(pwszSQLGet); } //Set same command, but with different iid. TEST2C_(hr = SetCmdStream(IID_IStream, DBGUID_DEFAULT, NULL), S_OK, E_NOINTERFACE) TESTC_PROVIDER(hr == S_OK) for(i=0; i<5; i++) { TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_IStream); TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) RELEASE_GETSTG; SAFE_FREE(pwszSQLGet); } CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(34) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdText, SetCmdStream, GetCmdText, GetCmdStream // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_34() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid; WCHAR* pwszCmd = NULL; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = m_pICommandText->SetCommandText(DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = m_pICommandText->GetCommandText(&guid, &pwszCmd), DB_E_CANTTRANSLATE) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_ISequentialStream); TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(35) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdStream, SetCmdText, GetCmdStream, GetCmdText // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_35() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = m_pICommandText->SetCommandText(DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, NULL), DB_E_CANTTRANSLATE) TEST2C_(hr = m_pICommandText->GetCommandText(&guid, &pwszSQLGet), S_OK, DB_S_DIALECTIGNORED) TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(36) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdStream, SetCmdText (make call fail), GetCmdStream succeeds. // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_36() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = m_pICommandText->SetCommandText(DBGUID_DSO, pwszSQL), DB_E_DIALECTNOTSUPPORTED) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_ISequentialStream); TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(37) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdText, SetCmdStream (make call fail), GetCmdText succeeds. // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_37() { TBEGIN HRESULT hr = E_FAIL; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = m_pICommandText->SetCommandText(DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DSO, pwszSQL), DB_E_DIALECTNOTSUPPORTED) TESTC_(hr = m_pICommandText->GetCommandText(&guid, &pwszSQLGet), S_OK) TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(38) //*----------------------------------------------------------------------- // @mfunc DB_S_DIALECTIGNORED: Set and Get with different GUIDS // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_38() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_SQL; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = m_pICommandStream->GetCommandStream(&iid, &guid, (IUnknown**)&m_pStorageGet), DB_S_DIALECTIGNORED) COMPARE(iid, IID_ISequentialStream); COMPARE(m_pStorageGet != NULL, TRUE); TESTC_(hr = Read(&pwszSQLGet), S_OK) TESTC(pwszSQL && pwszSQLGet) TESTC(wcscmp(pwszSQL, pwszSQLGet) == 0) CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(39) //*----------------------------------------------------------------------- // @mfunc E_INVALIDARG: ppCommandStream is NULL // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_39() { TBEGIN HRESULT hr = E_FAIL; IID iid = IID_IRowset; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = m_pICommandStream->GetCommandStream(&iid, &guid, NULL), E_INVALIDARG) COMPARE(guid, GUIDNULL); COMPARE(iid, IID_NULL); iid = IID_IRowset; TESTC_(hr = m_pICommandStream->GetCommandStream(&iid, NULL, NULL), E_INVALIDARG) COMPARE(iid, IID_NULL); guid = DBGUID_DEFAULT; TESTC_(hr = m_pICommandStream->GetCommandStream(NULL, &guid, NULL), E_INVALIDARG) COMPARE(guid, GUIDNULL); TESTC_(hr = m_pICommandStream->GetCommandStream(NULL, NULL, NULL), E_INVALIDARG) CLEANUP: SAFE_FREE(pwszSQL); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(40) //*----------------------------------------------------------------------- // @mfunc DB_E_NOCOMMAND: SetCmdStream, SetCmdStream(NULL), GetCmdStream // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_40() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) //Set a command stream. TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) //reset cmd stream. TESTC_(hr = m_pICommandStream->SetCommandStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, NULL), DB_E_NOCOMMAND) CLEANUP: SAFE_FREE(pwszSQL); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(41) //*----------------------------------------------------------------------- // @mfunc DB_E_NOCOMMAND: SetCmdStream, SetCmdText (NULL), GetCmdStream // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_41() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) //Set a command stream. TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) //reset cmd stream. TESTC_(hr = m_pICommandText->SetCommandText(DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, NULL), DB_E_NOCOMMAND) CLEANUP: SAFE_FREE(pwszSQL); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(42) //*----------------------------------------------------------------------- // @mfunc DB_E_CANTTRANSLATE: SetCmdText, GetCmdStream // // @rdesc TEST_PASS or TEST_FAIL // int TCGetCmdStream::Variation_42() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid; WCHAR* pwszCmd = NULL; WCHAR* pwszSQL = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = m_pICommandText->SetCommandText(DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, NULL), DB_E_CANTTRANSLATE) CLEANUP: SAFE_FREE(pwszSQL); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_TERMINATE_METHOD //*----------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TEST_PASS or TEST_FAIL // BOOL TCGetCmdStream::Terminate() { // TO DO: Add your own code here // {{ TCW_TERM_BASECLASS_CHECK2 return(CCmdStream::Terminate()); } // }} // }} TCW_TERMINATE_METHOD_END // }} TCW_TC_PROTOTYPE_END // {{ TCW_TC_PROTOTYPE(TCSetCmdStream) //*----------------------------------------------------------------------- //| Test Case: TCSetCmdStream - SetCommandStream Test Case //| Created: 11/15/1999 //*----------------------------------------------------------------------- //*----------------------------------------------------------------------- // @mfunc TestCase Initialization Routine // // @rdesc TRUE or FALSE // BOOL TCSetCmdStream::Init() { // {{ TCW_INIT_BASECLASS_CHECK if(CCmdStream::Init()) // }} { // TO DO: Add your own code here return TRUE; } return FALSE; } // {{ TCW_VAR_PROTOTYPE(1) //*----------------------------------------------------------------------- // @mfunc S_OK: Set cmd props. SetCmdStream. Execute. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_1() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; IID iid; GUID guid = DBGUID_DEFAULT; ULONG cPropSets = 0; DBPROPSET* rgPropSets = NULL; WCHAR* pwszSQLGet = NULL; ICommand* pICommand = NULL; ISequentialStream* pISS = NULL; SetProperty(DBPROP_IRowset, DBPROPSET_ROWSET, &cPropSets, &rgPropSets); //SetProperty(DBPROP_CANFETCHBACKWARDS, DBPROPSET_ROWSET, &cPropSets, &rgPropSets); //SetProperty(DBPROP_CANHOLDROWS, DBPROPSET_ROWSET, &cPropSets, &rgPropSets); hr = SetCmdProp(rgPropSets); COMPARE(hr==S_OK || hr==DB_E_ERRORSOCCURRED, TRUE); ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) TESTC(VerifyInterface(m_pICommandStream, IID_ICommand, COMMAND_INTERFACE,(IUnknown **)&pICommand)) TESTC_(pICommand->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_ISequentialStream); TESTC(m_pwszQ1 && pwszSQLGet) TESTC(wcscmp(m_pwszQ1, pwszSQLGet) == 0) CLEANUP: FreeProperties(&cPropSets, &rgPropSets); SAFE_FREE(pwszSQLGet); SAFE_RELEASE(pICommand); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(2) //*----------------------------------------------------------------------- // @mfunc S_OK: Execute CmdText, release rowset, SetCmdStream // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_2() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; WCHAR* pwszCmd = NULL; WCHAR* pwszSQL = NULL; IRowset* pIR = NULL; ISequentialStream* pISS = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = m_pICommandText->SetCommandText(DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(m_pICommandText->Execute(NULL, IID_IRowset, NULL, &lRA, (IUnknown**)&pIR), S_OK) TESTC(DefTestInterface(pIR)) SAFE_RELEASE(pIR); TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) TESTC_(m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) CLEANUP: SAFE_FREE(pwszSQL); SAFE_RELEASE(pIR); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(3) //*----------------------------------------------------------------------- // @mfunc S_OK: Set/Get/Execute. Verify cmd stream object lifetime // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_3() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; IID iid; GUID guid = DBGUID_DEFAULT; ULONG cRef = 0; ULONG ulLen = 0; WCHAR* pwszSQL = NULL; IDBCreateSession* pIDBCS = NULL; IDBCreateCommand* pIDBCC = NULL; ICommand* pICmd = NULL; ICommandStream* pICS = NULL; ISequentialStream* pISS = NULL; TESTC_(GetModInfo()->CreateProvider(NULL, IID_IDBCreateSession, (IUnknown**)&pIDBCS, CREATEDSO_SETPROPERTIES|CREATEDSO_INITIALIZE), S_OK) TESTC_(pIDBCS->CreateSession(NULL, IID_IDBCreateCommand, (IUnknown**)&pIDBCC), S_OK) TESTC_(pIDBCC->CreateCommand(NULL, IID_ICommandStream, (IUnknown**)&pICS), S_OK) TESTC(VerifyInterface(pICS, IID_ICommand, COMMAND_INTERFACE,(IUnknown **)&pICmd)) ALLOC_SETSTG; cRef = m_pStorageSet->GetRefCount(); TESTC_(Write(m_pwszQ1), S_OK) TESTC_(hr = pICS->SetCommandStream(IID_ISequentialStream, DBGUID_DEFAULT, (ISequentialStream*)m_pStorageSet), S_OK) TEST2C_(hr = pICS->GetCommandStream(&iid, &guid, (IUnknown**)&pISS), S_OK, DB_S_DIALECTIGNORED) COMPARE(iid, IID_ISequentialStream); SAFE_RELEASE(pISS); TESTC_(pICmd->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) SAFE_RELEASE(pIDBCS); SAFE_RELEASE(pIDBCC); SAFE_RELEASE(pICS); SAFE_RELEASE(pICmd); SAFE_RELEASE(pISS); COMPARE(m_pStorageSet->GetRefCount(), cRef); CLEANUP: SAFE_FREE(pwszSQL); SAFE_RELEASE(pIDBCS); SAFE_RELEASE(pIDBCC); SAFE_RELEASE(pICS); SAFE_RELEASE(pICmd); SAFE_RELEASE(pISS); RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(4) //*----------------------------------------------------------------------- // @mfunc S_OK: Execute some privlib queries and verify. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_4() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; WCHAR* pwszSQL = NULL; IRowset* pIRowset = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) //Apart from S_OK, can also expect to get - //DB_E_ERRORSINCOMMAND, since the type of command may not match with what DBGUID_DEFAULT stand for. //E_NOINTERFACE, since we are asking for IID_IRowset and Execute after SetCmdStream may only support returning stream objects. TEST3C_(hr = m_pICommandText->Execute(NULL, IID_IRowset, NULL, &lRA, (IUnknown**)&pIRowset), S_OK, DB_E_ERRORSINCOMMAND, E_NOINTERFACE) if(hr == S_OK) TESTC(VerifyRowset(SELECT_ALLFROMTBL, pIRowset)) CLEANUP: SAFE_FREE(pwszSQL); SAFE_RELEASE(pIRowset); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(5) //*----------------------------------------------------------------------- // @mfunc S_OK: pCommandStream is NULL (cmd state reset) // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_5() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) //Set a command stream. TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) //reset cmd stream. TESTC_(hr = m_pICommandStream->SetCommandStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, NULL), DB_E_NOCOMMAND) RELEASE_GETSTG; RELEASE_SETSTG; ALLOC_SETSTG; //Set a command stream. TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) //reset cmd stream multiple times. TESTC_(hr = m_pICommandStream->SetCommandStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = m_pICommandStream->SetCommandStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = m_pICommandStream->SetCommandStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = m_pICommandStream->SetCommandStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = m_pICommandStream->SetCommandStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, NULL), DB_E_NOCOMMAND) CLEANUP: SAFE_FREE(pwszSQL); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(6) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdStream with stream containing 2 cmds. Ptr on 2nd. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_6() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; WCHAR* pwszSQL = NULL; ULONG cWrote = 0; ULONG ulLen = 0; ULONG ulLen2 = 0; ISequentialStream* pISS = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) //Write first command to stream. ulLen = (ULONG)wcslen(pwszSQL); hr = m_pStorageSet->Write(wszByteOrder, 2, NULL); hr = m_pStorageSet->Write(pwszSQL, (ulLen)*sizeof(WCHAR), &cWrote); //Write second command to stream. ulLen2 = (ULONG)wcslen(m_pwszQ1); hr = m_pStorageSet->Write(L";", 2, NULL); hr = m_pStorageSet->Write(wszByteOrder, 2, NULL); hr = m_pStorageSet->Write(m_pwszQ1, (ulLen2)*sizeof(WCHAR), &cWrote); //Seek to beginning of second command. m_pStorageSet->Seek(2 + (ulLen)*sizeof(WCHAR) + 2); TESTC_(hr = m_pICommandStream->SetCommandStream(IID_ISequentialStream, DBGUID_DEFAULT, (ISequentialStream*)m_pStorageSet), S_OK) TESTC_(m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) CLEANUP: SAFE_FREE(pwszSQL); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(7) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdStream & Execute diffr queries on diffr cmd objs. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_7() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; ICommand* pICommand = NULL; ICommandStream* pICS = NULL; ISequentialStream* pISS = NULL; ISequentialStream* pISS2 = NULL; ALLOC_SETSTG; //Create another cmd object. TESTC_(m_pIDBCreateCommand->CreateCommand(NULL, IID_ICommand, (IUnknown**)&pICommand), S_OK) TESTC(VerifyInterface(pICommand, IID_ICommandStream, COMMAND_INTERFACE,(IUnknown **)&pICS)) //Set stream on first command. TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) RELEASE_SETSTG; ALLOC_SETSTG; //Set stream on second command. TESTC_(hr = Write(m_pwszQ2), S_OK) TESTC_(hr = pICS->SetCommandStream(IID_ISequentialStream, DBGUID_DEFAULT, (ISequentialStream*)m_pStorageSet), S_OK) //Execute command on first. TESTC_(m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) //Set the encoding on second command also to UTF-16 CHECK(SetEncdProp(UTF16, (IUnknown*)pICommand), S_OK); //Execute command on second. TESTC_(pICommand->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS2), S_OK) //Verify that query2 was executed. TESTC(VerifyQuery2(pISS2, IID_ISequentialStream)) CLEANUP: SAFE_RELEASE(pICommand); SAFE_RELEASE(pICS); SAFE_RELEASE(pISS); SAFE_RELEASE(pISS2); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(8) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdStream, Prepare, GetColInfo. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_8() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQLGet = NULL; DBORDINAL cCols = 0; DBCOLUMNINFO* rgInfo = NULL; WCHAR* pwszBuf = NULL; IColumnsInfo* pICF = NULL; ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) TESTC(PrepCmd()) TESTC(VerifyInterface(m_pICommandStream, IID_IColumnsInfo, COMMAND_INTERFACE,(IUnknown **)&pICF)) CHECK(pICF->GetColumnInfo(&cCols, &rgInfo, &pwszBuf), S_OK); COMPARE(!cCols && !rgInfo && !pwszBuf, TRUE); TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_ISequentialStream); TESTC(m_pwszQ1 && pwszSQLGet) TESTC(wcscmp(m_pwszQ1, pwszSQLGet) == 0) CLEANUP: SAFE_FREE(pwszSQLGet); SAFE_FREE(rgInfo); SAFE_FREE(pwszBuf); SAFE_RELEASE(pICF); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(9) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdStream, Prepare, GetColumnsRowset. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_9() { TBEGIN HRESULT hr = E_FAIL; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQLGet = NULL; DBCOUNTITEM cRows = 0; HROW* rghRows = NULL; IRowset* pIR = NULL; IColumnsRowset* pICR = NULL; ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) TESTC(PrepCmd()) TESTC_PROVIDER(VerifyInterface(m_pICommandStream, IID_IColumnsRowset, COMMAND_INTERFACE,(IUnknown **)&pICR)) TESTC_(pICR->GetColumnsRowset(NULL, 0, NULL, IID_IRowset, 0, NULL, (IUnknown**)&pIR), S_OK) TESTC(pIR != NULL) TESTC_(pIR->GetNextRows(DB_NULL_HCHAPTER, 0, 1, &cRows, &rghRows), DB_S_ENDOFROWSET) COMPARE(cRows, 0); TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_ISequentialStream); TESTC(m_pwszQ1 && pwszSQLGet) TESTC(wcscmp(m_pwszQ1, pwszSQLGet) == 0) CLEANUP: SAFE_FREE(pwszSQLGet); SAFE_FREE(rghRows); SAFE_RELEASE(pICR); SAFE_RELEASE(pIR); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(10) //*----------------------------------------------------------------------- // @mfunc S_OK: Implement stream on a large file. SetCmdStream. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_10() { // TO DO: Add your own code here return TRUE; } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(11) //*----------------------------------------------------------------------- // @mfunc S_OK: Aggregate stream got from Execute. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_11() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; ULONG cPropSets = 0; DBPROPSET* rgPropSets = NULL; IUnknown* pIUnkInner = NULL; ISequentialStream* pISS = NULL; SetProperty(DBPROP_ISequentialStream, DBPROPSET_ROWSET, &cPropSets, &rgPropSets); CHECK(hr = SetCmdProp(rgPropSets), S_OK); CAggregate Aggregate(m_pICommandText); ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) TESTC_(m_pICommandText->Execute(&Aggregate, IID_IUnknown, NULL, &lRA, (IUnknown**)&pIUnkInner), S_OK) Aggregate.SetUnkInner(pIUnkInner); //Verify Aggregation. TESTC(Aggregate.VerifyAggregationQI(hr, IID_ISequentialStream)) TESTC(VerifyInterface(pIUnkInner, IID_ISequentialStream, STREAM_INTERFACE,(IUnknown **)&pISS)) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) CLEANUP: if(rgPropSets) { VariantInit(&rgPropSets[0].rgProperties[0].vValue); CHECK(hr = SetCmdProp(rgPropSets), S_OK); } FreeProperties(&cPropSets, &rgPropSets); SAFE_RELEASE(pIUnkInner); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(12) //*----------------------------------------------------------------------- // @mfunc DB_E_ERRORSINCOMMAND: SetCmdStream with an embedded NULL terminator. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_12() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; WCHAR* pwszSQL = NULL; ULONG cWrote = 0; ULONG ulLen = 0; ISequentialStream* pISS = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) //Write first command to stream. ulLen = (ULONG)wcslen(pwszSQL); hr = m_pStorageSet->Write(wszByteOrder, 2, NULL); hr = m_pStorageSet->Write(pwszSQL, (ulLen)*sizeof(WCHAR), &cWrote); //Seek to middle of command and put a NULL term char. m_pStorageSet->Seek(2 + (ulLen)*sizeof(WCHAR)/2); m_pStorageSet->Write(L"", 2, NULL); TESTC_(hr = m_pICommandStream->SetCommandStream(IID_ISequentialStream, DBGUID_DEFAULT, (ISequentialStream*)m_pStorageSet), S_OK) TESTC_(m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), DB_E_ERRORSINCOMMAND) CLEANUP: SAFE_FREE(pwszSQL); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(13) //*----------------------------------------------------------------------- // @mfunc DB_E_ERRORSINCOMMAND: Set unicode stream without BOM // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_13() { // TO DO: Add your own code here return TRUE; } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(14) //*----------------------------------------------------------------------- // @mfunc S_OK: Set stream as ansi - no BOM // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_14() { // TO DO: Add your own code here return TRUE; } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(15) //*----------------------------------------------------------------------- // @mfunc S_OK: Set DBPROP_DEFERRED. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_15() { // TO DO: Add your own code here return TRUE; } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(16) //*----------------------------------------------------------------------- // @mfunc S_OK: Call SetCmdStream so it fails. Ref cnt unchanged. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_16() { TBEGIN HRESULT hr = E_FAIL; ULONG cRef=0; WCHAR* pwszSQL = NULL; IRowset* pIR = NULL; ALLOC_SETSTG; cRef = m_pStorageSet->GetRefCount(); TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(m_pTable->ExecuteCommand(SELECT_ALLFROMTBL, IID_IRowset, NULL, NULL, NULL, NULL, EXECUTE_IFNOERROR, 0, NULL, NULL, (IUnknown**)&pIR, (ICommand**)&m_pICommandText), S_OK) TESTC(pIR != NULL) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), DB_E_OBJECTOPEN) COMPARE(m_pStorageSet->GetRefCount(), cRef); SAFE_RELEASE(pIR); TESTC_(hr = SetCmdStream(IID_IRowset, DBGUID_DEFAULT, pwszSQL), E_NOINTERFACE) COMPARE(m_pStorageSet->GetRefCount(), cRef); TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DSO, pwszSQL), DB_E_DIALECTNOTSUPPORTED) COMPARE(m_pStorageSet->GetRefCount(), cRef); CLEANUP: SAFE_FREE(pwszSQL); SAFE_RELEASE(pIR); RELEASE_SETSTG; RELEASE_GETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(17) //*----------------------------------------------------------------------- // @mfunc S_OK: Release all objects & verify no ref cnts left on stream. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_17() { TBEGIN HRESULT hr = E_FAIL; ULONG cRef = 0; WCHAR* pwszSQL = NULL; IDBCreateSession* pIDBCS = NULL; IDBCreateCommand* pIDBCC = NULL; ICommandStream* pICS = NULL; TESTC_(GetModInfo()->CreateProvider(NULL, IID_IDBCreateSession, (IUnknown**)&pIDBCS, CREATEDSO_SETPROPERTIES|CREATEDSO_INITIALIZE), S_OK) TESTC_(pIDBCS->CreateSession(NULL, IID_IDBCreateCommand, (IUnknown**)&pIDBCC), S_OK) TESTC_(pIDBCC->CreateCommand(NULL, IID_ICommandStream, (IUnknown**)&pICS), S_OK) ALLOC_SETSTG; cRef = m_pStorageSet->GetRefCount(); TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) //Write command to stream. TESTC_(Write(pwszSQL), S_OK) TESTC_(hr = pICS->SetCommandStream(IID_ISequentialStream, DBGUID_DEFAULT, (ISequentialStream*)m_pStorageSet), S_OK) SAFE_RELEASE(pIDBCS); SAFE_RELEASE(pIDBCC); SAFE_RELEASE(pICS); COMPARE(m_pStorageSet->GetRefCount(), cRef); CLEANUP: SAFE_FREE(pwszSQL); SAFE_RELEASE(pIDBCS); SAFE_RELEASE(pIDBCC); SAFE_RELEASE(pICS); RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(18) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdStream, GetCmdStream, SetCmdStream with stream got. Execute. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_18() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; IID iid; GUID guid = DBGUID_DEFAULT; ISequentialStream* pISS = NULL; ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, NULL), S_OK) TESTC_(hr = m_pICommandStream->SetCommandStream(IID_ISequentialStream, DBGUID_DEFAULT, (ISequentialStream*)m_pStorageGet), S_OK) //Execute command on second. TESTC_(m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) CLEANUP: SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(19) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdStream, Execute, GetCmdStream // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_19() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQLGet = NULL; ICommand* pICommand = NULL; ISequentialStream* pISS = NULL; ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) TESTC(VerifyInterface(m_pICommandStream, IID_ICommand, COMMAND_INTERFACE,(IUnknown **)&pICommand)) TESTC_(pICommand->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) COMPARE(iid, IID_ISequentialStream); TESTC(m_pwszQ1 && pwszSQLGet) TESTC(wcscmp(m_pwszQ1, pwszSQLGet) == 0) CLEANUP: SAFE_FREE(pwszSQLGet); SAFE_RELEASE(pICommand); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(20) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdStream, GetCmdStream, Execute // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_20() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQLGet = NULL; ISequentialStream* pISS = NULL; ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, &pwszSQLGet), S_OK) TESTC(m_pwszQ1 && pwszSQLGet) TESTC(wcscmp(m_pwszQ1, pwszSQLGet) == 0) TESTC_(m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) CLEANUP: SAFE_FREE(pwszSQLGet); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(21) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdStream, Execute, Execute // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_21() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; ISequentialStream* pIS1 = NULL; ISequentialStream* pIS2 = NULL; ISequentialStream* pIS3 = NULL; ALLOC_SETSTG; TEST2C_(hr = SetCmdStream(IID_IStream, DBGUID_DEFAULT, m_pwszQ2), S_OK, E_NOINTERFACE) TESTC_PROVIDER(hr == S_OK) TESTC_(hr = m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pIS1), S_OK) //Verify that query2 was executed. TESTC(VerifyQuery2(pIS1, IID_ISequentialStream)) TESTC_(m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pIS2), S_OK) //Verify that query2 was executed. TESTC(VerifyQuery2(pIS2, IID_ISequentialStream)) TESTC_(hr = m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pIS3), S_OK) //Verify that query2 was executed. TESTC(VerifyQuery2(pIS3, IID_ISequentialStream)) CLEANUP: SAFE_RELEASE(pIS1); SAFE_RELEASE(pIS2); SAFE_RELEASE(pIS3); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(22) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdText, SetCmdStream, Execute // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_22() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; WCHAR* pwszSQL = NULL; ISequentialStream* pISS = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(m_pICommandText->SetCommandText(DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) TESTC_(m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) CLEANUP: SAFE_FREE(pwszSQL); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(23) //*----------------------------------------------------------------------- // @mfunc S_OK: SetCmdStream, GetCmdStream, SetCmdText, Execute. Read got stream. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_23() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; IID iid; GUID guid = DBGUID_DEFAULT; WCHAR* pwszSQL = NULL; WCHAR* pwszSQLGet = NULL; IRowset* pIR = NULL; ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, NULL), S_OK) TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(m_pICommandText->SetCommandText(DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(m_pICommandText->Execute(NULL, IID_IRowset, NULL, &lRA, (IUnknown**)&pIR), S_OK) TESTC(VerifyRowset(SELECT_ALLFROMTBL, pIR)) //Read the got stream. TESTC_(hr = Read(&pwszSQLGet), S_OK) TESTC(m_pwszQ1 && pwszSQLGet) TESTC(wcscmp(m_pwszQ1, pwszSQLGet) == 0) CLEANUP: SAFE_FREE(pwszSQL); SAFE_FREE(pwszSQLGet); SAFE_RELEASE(pIR); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(24) //*----------------------------------------------------------------------- // @mfunc S_OK: Ask for IUnknown on Execute. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_24() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; ULONG cPropSets = 0; DBPROPSET* rgPropSets = NULL; WCHAR* pwszSQL = NULL; IUnknown* pIUnk = NULL; ISequentialStream* pISS = NULL; SetProperty(DBPROP_ISequentialStream, DBPROPSET_ROWSET, &cPropSets, &rgPropSets); CHECK(hr = SetCmdProp(rgPropSets), S_OK); ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) //Execute asking for IID_IUnknown on the stream. TESTC_(m_pICommandText->Execute(NULL, IID_IUnknown, NULL, &lRA, (IUnknown**)&pIUnk), S_OK) TESTC(VerifyInterface(pIUnk, IID_ISequentialStream, STREAM_INTERFACE,(IUnknown **)&pISS)) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) CLEANUP: if(rgPropSets) { VariantInit(&rgPropSets[0].rgProperties[0].vValue); CHECK(hr = SetCmdProp(rgPropSets), S_OK); } FreeProperties(&cPropSets, &rgPropSets); SAFE_FREE(pwszSQL); SAFE_RELEASE(pIUnk); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(25) //*----------------------------------------------------------------------- // @mfunc DBPROP_OUTPUTSTREAM - ISequentialStream // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_25() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; ULONG cPropSets = 0; DBPROPSET* rgPropSets = NULL; ISequentialStream* pISS = NULL; ALLOC_SETSTG; m_pStorageGet = new CStorage(); TESTC(m_pStorageGet != NULL) SetProperty(DBPROP_OUTPUTSTREAM, DBPROPSET_STREAM, &cPropSets, &rgPropSets, (void*)m_pStorageGet, DBTYPE_IUNKNOWN); hr = SetCmdProp(rgPropSets); COMPARE(hr==S_OK || hr==DB_E_ERRORSOCCURRED, TRUE); if(hr!=S_OK) { odtLog<Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) TESTC(VerifyEqualInterface(pISS, (ISequentialStream*)m_pStorageGet)) //Verify that query1 was executed. TESTC(VerifyQuery1((ISequentialStream*)m_pStorageGet, IID_ISequentialStream)) CLEANUP: if(rgPropSets) { V_VT(&rgPropSets[0].rgProperties[0].vValue) = VT_EMPTY; CHECKW(SetCmdProp(rgPropSets), S_OK); } FreeProperties(&cPropSets, &rgPropSets); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(26) //*----------------------------------------------------------------------- // @mfunc DBPROP_OUTPUTSTREAM - ISequentialStream (NULL ppRowset) // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_26() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; ULONG cPropSets = 0; DBPROPSET* rgPropSets = NULL; ISequentialStream* pISS = NULL; ALLOC_SETSTG; m_pStorageGet = new CStorage(); TESTC(m_pStorageGet != NULL) SetProperty(DBPROP_OUTPUTSTREAM, DBPROPSET_STREAM, &cPropSets, &rgPropSets, (void*)m_pStorageGet, DBTYPE_IUNKNOWN); hr = SetCmdProp(rgPropSets); COMPARE(hr==S_OK || hr==DB_E_ERRORSOCCURRED, TRUE); if(hr!=S_OK) { odtLog<Execute(NULL, IID_ISequentialStream, NULL, &lRA, NULL), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1((ISequentialStream*)m_pStorageGet, IID_ISequentialStream)) CLEANUP: if(rgPropSets) { V_VT(&rgPropSets[0].rgProperties[0].vValue) = VT_EMPTY; CHECKW(SetCmdProp(rgPropSets), S_OK); } FreeProperties(&cPropSets, &rgPropSets); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(27) //*----------------------------------------------------------------------- // @mfunc DBPROP_OUTPUTSTREAM - IStream // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_27() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; ULONG cPropSets = 0; DBPROPSET* rgPropSets = NULL; IStream* pIS = NULL; ALLOC_SETSTG; m_pStorageGet = new CStorage(); TESTC(m_pStorageGet != NULL) SetProperty(DBPROP_OUTPUTSTREAM, DBPROPSET_STREAM, &cPropSets, &rgPropSets, (void*)m_pStorageGet, DBTYPE_IUNKNOWN); hr = SetCmdProp(rgPropSets); COMPARE(hr==S_OK || hr==DB_E_ERRORSOCCURRED, TRUE); if(hr!=S_OK) { odtLog<Execute(NULL, IID_IStream, NULL, &lRA, (IUnknown**)&pIS), S_OK) TESTC(pIS != NULL) TESTC(VerifyEqualInterface(pIS, (IStream*)m_pStorageGet)) //Verify that query1 was executed. TESTC(VerifyQuery1((IStream*)m_pStorageGet, IID_IStream)) CLEANUP: if(rgPropSets) { V_VT(&rgPropSets[0].rgProperties[0].vValue) = VT_EMPTY; CHECKW(SetCmdProp(rgPropSets), S_OK); } FreeProperties(&cPropSets, &rgPropSets); SAFE_RELEASE(pIS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(28) //*----------------------------------------------------------------------- // @mfunc DBPROP_OUTPUTENCODING - UTF-8 // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_28() { TBEGIN HRESULT hr = E_FAIL; ULONG cRead = 0; ULONG ulReadIncr = READ_INCR; WCHAR* pwszCmd = NULL; CHAR* pszCmd = NULL; CHAR* pszEnd = NULL; BOOL fEnd = FALSE; DBROWCOUNT lRA = 0; ISequentialStream* pISS = NULL; TESTC_(SetEncdProp(UTF8), S_OK) ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) TESTC_(m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) SAFE_RELEASE(pISS); RELEASE_SETSTG; ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ2), S_OK) TESTC_(m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query2 was executed. SAFE_ALLOC(pszCmd, CHAR, ulReadIncr); hr = pISS->Read(pszCmd, ulReadIncr, &cRead); if(cRead < ulReadIncr) { fEnd = TRUE; pszEnd = (CHAR*)pszCmd + cRead; } while(!fEnd) { cRead = 0; ulReadIncr += READ_INCR; SAFE_REALLOC(pszCmd, CHAR, ulReadIncr); hr = pISS->Read((BYTE*)pszCmd +ulReadIncr -READ_INCR, READ_INCR, &cRead); if(cRead < READ_INCR) { fEnd = TRUE; pszEnd = (CHAR*)pszCmd +ulReadIncr -READ_INCR + cRead; } } memset((BYTE*)pszEnd, 0, 1); pwszCmd = ConvertToWCHAR(pszCmd); TESTC(pwszCmd != NULL) TESTC(wcsstr(pwszCmd, m_pwszQ2) != NULL) CLEANUP: SAFE_FREE(pwszCmd); SAFE_FREE(pszCmd); SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(29) //*----------------------------------------------------------------------- // @mfunc DBPROP_OUTPUTENCODING - UTF-16 // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_29() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; ISequentialStream* pISS = NULL; TESTC_(SetEncdProp(UTF16), S_OK) ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ1), S_OK) TESTC_(m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) SAFE_RELEASE(pISS); RELEASE_SETSTG; ALLOC_SETSTG; TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, m_pwszQ2), S_OK) TESTC_(m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query2 was executed. TESTC(VerifyQuery2(pISS, IID_ISequentialStream)) CLEANUP: SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(30) //*----------------------------------------------------------------------- // @mfunc E_NOINTERFACE: iid passed in does not match object // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_30() { TBEGIN HRESULT hr = E_FAIL; WCHAR* pwszSQL = NULL; //Make a str4eam object that can only be QIed for ILockBytes. ALLOC_SETSTG; m_pStorageSet->SetQISeqStream(FALSE); m_pStorageSet->SetQIStream(FALSE); m_pStorageSet->SetQILockBytes(TRUE); TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), E_NOINTERFACE) CLEANUP: SAFE_FREE(pwszSQL); RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(31) //*----------------------------------------------------------------------- // @mfunc E_NOINTERFACE: iid is IRowset & IRow. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_31() { TBEGIN HRESULT hr = E_FAIL; WCHAR* pwszSQL = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_IRow, DBGUID_DEFAULT, pwszSQL), E_NOINTERFACE) TESTC_(hr = SetCmdStream(IID_IRowset, DBGUID_DEFAULT, pwszSQL), E_NOINTERFACE) CLEANUP: SAFE_FREE(pwszSQL); RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(32) //*----------------------------------------------------------------------- // @mfunc DB_E_CANTTRANSLATE: SetCmdStream, GetCmdText // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_32() { TBEGIN HRESULT hr = E_FAIL; GUID guid = DBGUID_DEFAULT; GUID guidNull = DB_NULLGUID; WCHAR* pwszCmd = NULL; WCHAR* pwszSQL = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = m_pICommandText->GetCommandText(&guid, &pwszCmd), DB_E_CANTTRANSLATE) COMPARE(guid, guidNull); COMPARE(pwszCmd, NULL); CLEANUP: SAFE_FREE(pwszSQL); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(33) //*----------------------------------------------------------------------- // @mfunc DB_E_DIALECTNOTSUPPORTED: Use some bugs guids & DBGUID_NULL // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_33() { TBEGIN HRESULT hr = E_FAIL; GUID guidNull = DB_NULLGUID; ALLOC_SETSTG; CHECK(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DSO, m_pwszQ1), DB_E_DIALECTNOTSUPPORTED); CHECK(hr = SetCmdStream(IID_ISequentialStream, DBGUID_ROWSET, m_pwszQ1), DB_E_DIALECTNOTSUPPORTED); CHECK(hr = SetCmdStream(IID_ISequentialStream, guidNull, m_pwszQ1), DB_E_DIALECTNOTSUPPORTED); CLEANUP: RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(34) //*----------------------------------------------------------------------- // @mfunc DB_E_DIALECTNOTSUPPORTED (or S_OK): use DBGUID_SQL. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_34() { TBEGIN HRESULT hr = E_FAIL; ALLOC_SETSTG; TEST2C_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_SQL, m_pwszQ1), S_OK, DB_E_DIALECTNOTSUPPORTED); if(hr == S_OK) odtLog<Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pISS), S_OK) //Verify that query1 was executed. TESTC(VerifyQuery1(pISS, IID_ISequentialStream)) TESTC_(hr = SetCmdStream(IID_ISequentialStream, DBGUID_DEFAULT, NULL), DB_E_OBJECTOPEN) CLEANUP: SAFE_RELEASE(pISS); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(36) //*----------------------------------------------------------------------- // @mfunc Clear previous error object. // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_36() { TBEGIN HRESULT hr = E_FAIL; DBROWCOUNT lRA = 0; ULONG cRecords = 0; IColumnsInfo* pIC = NULL; ISequentialStream* pIS1 = NULL; IErrorInfo* pIEI = NULL; IErrorRecords* pIER = NULL; ALLOC_SETSTG; TEST2C_(hr = SetCmdStream(IID_IStream, DBGUID_DEFAULT, m_pwszQ2), S_OK, E_NOINTERFACE) TESTC_PROVIDER(hr == S_OK) TESTC_(hr = m_pICommandText->Execute(NULL, IID_ISequentialStream, NULL, &lRA, (IUnknown**)&pIS1), S_OK) //Cause an error. TESTC(VerifyInterface(m_pICommandText, IID_IColumnsInfo, COMMAND_INTERFACE,(IUnknown **)&pIC)) TESTC_(pIC->GetColumnInfo(NULL, NULL, NULL), E_INVALIDARG) //Verify that query2 was executed. TESTC(VerifyQuery2(pIS1, IID_ISequentialStream)) //When stream was read above it returned S_OK. So, the error info //should have been cleared. //Get the IErrorInfo interface. hr = GetErrorInfo(0, &pIEI) ; if(hr == S_FALSE) { odtLog<CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = m_pICommandText->SetCommandText(DBGUID_DEFAULT, pwszSQL), S_OK) TESTC_(hr = GetCmdStream(&iid, &guid, NULL), DB_E_CANTTRANSLATE) TESTC(XCHECK(m_pICommandStream, IID_ICommandStream, hr)); CLEANUP: SAFE_FREE(pwszSQL); RELEASE_GETSTG; RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_VAR_PROTOTYPE(38) //*----------------------------------------------------------------------- // @mfunc Extended error test - SetCmdStream // // @rdesc TEST_PASS or TEST_FAIL // int TCSetCmdStream::Variation_38() { TBEGIN HRESULT hr = E_FAIL; WCHAR* pwszSQL = NULL; ALLOC_SETSTG; TESTC_(hr = m_pTable->CreateSQLStmt(SELECT_ALLFROMTBL, m_pTable->GetTableName(), &pwszSQL), S_OK) TESTC_(hr = SetCmdStream(IID_IRowset, DBGUID_DEFAULT, pwszSQL), E_NOINTERFACE) TESTC(XCHECK(m_pICommandStream, IID_ICommandStream, hr)); CLEANUP: SAFE_FREE(pwszSQL); RELEASE_SETSTG; TRETURN } // }} TCW_VAR_PROTOTYPE_END // {{ TCW_TERMINATE_METHOD //*----------------------------------------------------------------------- // @mfunc TestCase Termination Routine // // @rdesc TEST_PASS or TEST_FAIL // BOOL TCSetCmdStream::Terminate() { // TO DO: Add your own code here // {{ TCW_TERM_BASECLASS_CHECK2 return(CCmdStream::Terminate()); } // }} // }} TCW_TERMINATE_METHOD_END // }} TCW_TC_PROTOTYPE_END