2025-11-28 00:35:46 +09:00

11215 lines
283 KiB
C++

//--------------------------------------------------------------------
// Microsoft OLE DB Test
//
// Copyright 1995-2000 Microsoft Corporation.
//
// @doc
//
// @module ICOLINFO.CPP | OLE DB IColumnsInfo tests for Provider,
//
#define DBINITCONSTANTS // Must be defined to initialize constants in OLEDB.H
#define INITGUID
#include "modstandard.hpp"
#include "icolinfo.h"
#include "ExtraLib.h"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Module Values
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// {{ TCW_MODULE_GLOBALS
DECLARE_MODULE_CLSID = { 0xf17d6f60, 0xd740, 0x11ce, { 0x88, 0xe7, 0x00, 0xaa, 0x00, 0xb5, 0xa9, 0x1b }};
DECLARE_MODULE_NAME("IColumnsInfo");
DECLARE_MODULE_OWNER("Microsoft");
DECLARE_MODULE_DESCRIP("The test module for IColumnsInfo interface.");
DECLARE_MODULE_VERSION(795921705);
// TCW_WizardVersion(2)
// TCW_Automation(False)
// }} TCW_MODULE_GLOBALS_END
//Check whether the provider is read only
BOOL g_fReadOnlyProvider = FALSE;
LPCOLESTR g_pwszRowURL=NULL;
LPCOLESTR g_pwszRowsetURL=NULL;
GUID guidMod = { 0xf17d6f60, 0xd740, 0x11ce, { 0x88, 0xe7, 0x00, 0xaa, 0x00, 0xb5, 0xa9, 0x1b }};
//--------------------------------------------------------------------
// @func Module level initialization routine
//
// @rdesc Success or Failure
// @flag TRUE | Successful initialization
// @flag FALSE | Initialization problems
//
BOOL ModuleInit(CThisTestModule * pThisTestModule)
{
// Get connection and session objects
if (ModuleCreateDBSession(pThisTestModule))
{
//Check to see if the DSO is ReadOnly
g_fReadOnlyProvider = GetProperty(DBPROP_DATASOURCEREADONLY, DBPROPSET_DATASOURCEINFO, pThisTestModule->m_pIUnknown);
g_pwszRowURL = NULL;
g_pwszRowsetURL = NULL;
// Create a table we'll use for the whole test module,
// store it in pVoid for now
pThisTestModule->m_pVoid = new CTable(
(IUnknown *)pThisTestModule->m_pIUnknown2, (LPWSTR)gwszModuleName);
if (!pThisTestModule->m_pVoid)
{
odtLog << wszMemoryAllocationError;
return FALSE;
}
// Start with a table with 5 rows
TERM(FAILED(((CTable *)pThisTestModule->m_pVoid)->CreateTable(5,1,NULL,PRIMARY,TRUE)));
return TRUE;
}
return FALSE;
}
//--------------------------------------------------------------------
// @func Module level termination routine
//
// @rdesc Success or Failure
// @flag TRUE | Successful initialization
// @flag FALSE | Initialization problems
//
BOOL ModuleTerminate(CThisTestModule * pThisTestModule)
{
// We still own the table since all of our testcases
// have only used it and not deleted it.
if (pThisTestModule->m_pVoid)
{
// Remove table from database
((CTable *)pThisTestModule->m_pVoid)->DropTable();
// Delete CTable object
delete (CTable*)pThisTestModule->m_pVoid;
pThisTestModule->m_pVoid = NULL;
}
return ModuleReleaseDBSession(pThisTestModule);
}
////////////////////////////////////////////////////////////////////////
// TCBase - Class for reusing Test Cases.
// This is one of the base classes from which all the Test Case
// classes will inherit. It is used to duplicate test cases, yet
// maintain some sort of distinct identity for each.
//
////////////////////////////////////////////////////////////////////////
class TCBase
{
public:
//constructor
TCBase() { SetTestCaseParam(TC_Rowset); }
//Set the m_fWarning and m_fBinder flags.
virtual void SetTestCaseParam(ETESTCASE eTestCase = TC_Rowset)
{
m_eTestCase = eTestCase;
switch(eTestCase)
{
case TC_Rowset:
break;
case TC_Cmd:
break;
case TC_OpenRW:
break;
case TC_Bind:
break;
case TC_IColInfo2:
break;
case TC_SingSel:
break;
default:
ASSERT(!L"Unhandled Type...");
break;
};
}
//data
ETESTCASE m_eTestCase;
};
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Base Class Section
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
class IColInfo : public CSessionObject, public TCBase
{
public:
// @cmember Which HRESULT should I expect
PREPARATION m_ePreparation;
// @cmember What method
METHOD_CHOICE m_Method;
// @cmember Whether I want to check the structures coming back
BOOL m_fCheckIColumnsInfo;
// @cmember Supported Properties
DBPROPID m_DBPROPID;
// @cmember Count of rows affected, based on non-select statement
DBROWCOUNT m_cRowsAffected;
// @cmember Interface pointers
IDBInitialize * m_pMyIDBInitialize;
IColumnsInfo * m_pIColumnsInfo;
IColumnsInfo2 * m_pIColumnsInfo2;
ICommand * m_pICommand;
IRowset * m_pIRowset;
// @cmember GetColumnInfo params
DBORDINAL m_cColumns;
DBCOLUMNINFO * m_rgInfo;
WCHAR * m_pStringsBuffer;
// @cmember IColumnsInfo2 params
DBORDINAL m_cColumns2;
DBCOLUMNINFO* m_rgInfo2;
DBID * m_rgColumnIDs2;
DBORDINAL m_cMasks;
DBID* m_rgMasks;
BOOL m_fDocSource;
// @cmember MapColumnIDs params
DBORDINAL m_cColumnIDs;
DBID * m_rgColumnIDs;
DBORDINAL* m_rgColumns;
// @cmember Pointer to Row Object
CRowObject* m_pCRowObj;
CRowset* m_pCRowset;
// @cmember CheckProperty
IUnknown * m_pIUnknown;
// @cmember Ordinals of the SQL Statement
DBORDINAL m_cOrdTbl1;
DB_LORDINAL* m_prgOrdTbl1;
DBORDINAL m_cOrdTbl2;
DB_LORDINAL* m_prgOrdTbl2;
// @member HResult
HRESULT m_hr;
// @cmember Constructor
IColInfo(const LPWSTR wszTestCaseName): CSessionObject(wszTestCaseName)
{
// Interface pointer
m_pIColumnsInfo = NULL;
m_pIColumnsInfo2 = NULL;
m_pICommand = NULL;
m_pIRowset = NULL;
m_pMyIDBInitialize = NULL;
m_Method = INVALID_METHOD;
m_fDocSource = FALSE;
m_hr = E_FAIL;
// GetColumnInfo
m_cColumns = 0;
m_rgInfo = NULL;
m_pStringsBuffer = NULL;
m_cColumns2 = 0;
m_rgInfo2 = NULL;
m_rgColumnIDs2 = NULL;
m_cMasks = 0;
m_rgMasks = NULL;
m_pCRowObj = NULL;
m_pCRowset = NULL;
// MapColumnIDs
m_cColumnIDs = 0;
m_rgColumnIDs = NULL;
m_rgColumns = NULL;
m_pIUnknown = NULL;
m_cOrdTbl1 = 0;
m_prgOrdTbl1 = NULL;
m_cOrdTbl2 = 0;
m_prgOrdTbl2 = NULL;
};
// @cmember Destructor
virtual ~IColInfo()
{
// Interface pointer
ASSERT(!m_pIColumnsInfo);
ASSERT(!m_pIColumnsInfo2);
ASSERT(!m_pICommand);
ASSERT(!m_pIRowset);
// GetColumnInfo
ASSERT(!m_rgInfo);
ASSERT(!m_pStringsBuffer);
ASSERT(!m_rgInfo2);
ASSERT(!m_rgColumnIDs2);
ASSERT(!m_rgMasks);
ASSERT(!m_pCRowObj);
ASSERT(!m_pCRowset);
// MapColumnIDs
ASSERT(!m_rgColumnIDs);
ASSERT(!m_rgColumns);
};
// @cmember Test case Init
BOOL Init(EINTERFACE eInterface);
// @cmember Test case Terminate
BOOL Terminate();
// @cmember GetDBIDs copies dbids form DBCOLUMNINFO structure and makes
// param to pass to MapColIDs
HRESULT GetDBIDs(
BOOL fcColumnIDs=TRUE,
BOOL frgColumnIDs=TRUE,
BOOL frgColumns=TRUE,
ULONG cExpectedRuns=1,
BOOL fPrep = TRUE
);
// @cmember MakeDBIDArrays copies dbids form DBCOLUMNINFO structure and makes
// param to pass to MapColIDs
HRESULT MakeDBIDArrays(
BOOL fcColumnIDs=TRUE,
BOOL frgColumnIDs=TRUE,
BOOL frgColumns=TRUE
);
// @cmember Compare Ordinal to CCol
BOOL CheckOrdinal(HRESULT hr, BOOL bCheckOrder=TRUE);
// @cmember Check HResult
BOOL IfErrorParmsShouldBeNULL();
// @cmember Check Correctness of each column
void CheckEachColumn(HRESULT hr,DBPROPID PropID=0,EQUERY eSQLStmt=NO_QUERY);
// @cmember Variation-specific initialization
BOOL Init_Var();
// @cmember Variation-specific initialization
BOOL Free(BOOL fFreeIColInfo=TRUE);
// @cmember Free the IColumnsInfo buffers
BOOL FreeColumnInfo(DBORDINAL* pcColumns,DBCOLUMNINFO** prgInfo, OLECHAR** pStringsBuffer);
// @cmember Executes MapColumnIDs on a rowset object
HRESULT ExecuteMethod_row(
BOOL fcColumnIDs,
BOOL frgColumnIDs,
BOOL frgColumns,
STATEMENTKIND StmtKd,
EQUERY sqlStmt,
WCHAR * pStmt,
EPREPARE ePrepare,
ULONG cExpectedRuns=1,
DBPROPID prop=0
);
// @cmember Executes MapClumnIDs on a command object
HRESULT ExecuteMethod_cmd(
BOOL fcColumnIDs,
BOOL frgColumnIDs,
BOOL frgColumns,
STATEMENTKIND StmtKd,
EQUERY sqlStmt,
WCHAR * pStmt,
EPREPARE ePrepare,
ULONG cExpectedRuns=1,
DBPROPID prop=0,
BOOL fSingSel=FALSE
);
// @cmember Obtains a row object from a rowset.
BOOL GetRowFromRowset(BOOL bColInfo2);
// @cmember Obtains a row object from a command.
BOOL GetRowFromCommand(BOOL bColInfo2);
// @cmember Obtains a row object from OpenRowset.
BOOL GetRowFromOpenRW(BOOL bColInfo2);
// @cmember Obtains a row object by direct binding.
BOOL GetRowFromBind(BOOL bColInfo2);
//Get IColumnsInfo interface on Row object
BOOL GetRowIColumnsInfo(ICommand* pIC, IUnknown** pICI);
// @cmember Calls a method on the row object in m_pCRowObj.
HRESULT CallMethodOnRowObj(BOOL bColInfo2, METHOD_CHOICE method=INVALID_METHOD);
// @cmember Checks the returned values of output params.
BOOL CheckParams(HRESULT hr, METHOD_CHOICE method);
// @cmember Checks the row specific columns returned by calls
// on a Row object.
BOOL CheckRowSpecificColumns(DBORDINAL cCols, DBCOLUMNINFO* rgInfo, DBORDINAL ulFirstOrd);
// @cmember Checks the returned columns to see if the restrictions
//were applied.
BOOL VerifyRestrictions();
// compare the DBCOLUMNINFO struct except for:
BOOL Compare_pwszName(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex,EQUERY eSQLStmt);
BOOL Compare_pTypeInfo(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex);
BOOL Compare_iOrdinal(DBORDINAL iOrdinal,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex);
BOOL Compare_ulColumnSize(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex);
BOOL Compare_dwType(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex);
BOOL Compare_bPrecision(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex);
BOOL Compare_bScale(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex);
BOOL Compare_Columnid(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex,EQUERY eSQLStmt);
BOOL Compare_DBCOLUMNFLAGS_CACHEDEFERRED(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex);
BOOL Compare_DBCOLUMNFLAGS_ISBOOKMARK(DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex);
BOOL Compare_DBCOLUMNFLAGS_ISFIXEDLENGTH(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex);
BOOL Compare_DBCOLUMNFLAGS_ISLONG(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex);
BOOL Compare_DBCOLUMNFLAGS_ISNULLABLE(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex);
BOOL Compare_DBCOLUMNFLAGS_ISROWID(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex);
BOOL Compare_DBCOLUMNFLAGS_ISROWVER(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex);
BOOL Compare_DBCOLUMNFLAGS_MAYBENULLABLE(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex,EQUERY eSQLStmt);
BOOL Compare_DBCOLUMNFLAGS_MAYDEFER(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex);
BOOL Compare_DBCOLUMNFLAGS_WRITE(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex);
void PrintInfo(DBCOLUMNINFO * dbColumnInfo, DBORDINAL ulIndex);
BOOL GetPreparation();
void SetRowsetProperties(GUID propset, DBPROPID propid);
};
void IColInfo::SetRowsetProperties(GUID propset, DBPROPID propid)
{
//Set properties for rowsets
DBPROP * rgDBProps;
rgDBProps = (DBPROP *)PROVIDER_ALLOC(sizeof(DBPROP) * 1);
rgDBProps->dwPropertyID = propid;
rgDBProps->dwOptions = DBPROPOPTIONS_REQUIRED;
rgDBProps->vValue.vt = VT_BOOL;
V_BOOL(&(rgDBProps->vValue)) = VARIANT_TRUE;
//Build the Set struct to set all our rowset properties
m_cPropSets = 1;
m_rgPropSets = (DBPROPSET *)PROVIDER_ALLOC(m_cPropSets * sizeof(DBPROPSET));
m_rgPropSets->rgProperties = rgDBProps;
m_rgPropSets->rgProperties->colid = DB_NULLID;
m_rgPropSets->cProperties = 1;
m_rgPropSets->guidPropertySet = propset;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// GetPreparation
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL IColInfo::GetPreparation()
{
BOOL fSucceed = FALSE;
ICommand * pICommand = NULL;
ICommandPrepare * pICommandPrepare = NULL;
// Initialize
m_ePreparation = NOTSUPPORTED;
// Check for Command Support
if (!m_pIDBCreateCommand)
return TRUE;
if (FAILED(m_pIDBCreateCommand->CreateCommand(NULL,IID_ICommand,(IUnknown **)&pICommand)))
return FALSE;
if (SUCCEEDED(pICommand->QueryInterface(IID_ICommandPrepare,(void **)&pICommandPrepare)))
m_ePreparation = SUPPORTED;
fSucceed = TRUE;
SAFE_RELEASE(pICommand);
SAFE_RELEASE(pICommandPrepare);
return fSucceed;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// PrintInfo
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IColInfo::PrintInfo(DBCOLUMNINFO * dbColumnInfo, DBORDINAL ulIndex)
{
odtLog <<L"[" <<ulIndex <<L"] -> pwszName = " <<dbColumnInfo[ulIndex].pwszName <<ENDL;
odtLog <<L"[" <<ulIndex <<L"] -> iOrdinal = " <<dbColumnInfo[ulIndex].iOrdinal <<ENDL;
odtLog <<L"[" <<ulIndex <<L"] -> ulColumnSize = " <<dbColumnInfo[ulIndex].ulColumnSize <<ENDL;
odtLog <<L"[" <<ulIndex <<L"] -> wType = " <<dbColumnInfo[ulIndex].wType <<ENDL;
odtLog <<L"[" <<ulIndex <<L"] -> bPrecision = " <<dbColumnInfo[ulIndex].bPrecision <<ENDL;
odtLog <<L"[" <<ulIndex <<L"] -> bScale = " <<dbColumnInfo[ulIndex].bScale <<ENDL;
odtLog <<L"Flag that are supported are : " <<ENDL;
if (dbColumnInfo[ulIndex].dwFlags & DBCOLUMNFLAGS_CACHEDEFERRED) odtLog <<L"CACHEDEFERRED ";
if (dbColumnInfo[ulIndex].dwFlags & DBCOLUMNFLAGS_ISBOOKMARK) odtLog <<L"ISBOOKMARK ";
if (dbColumnInfo[ulIndex].dwFlags & DBCOLUMNFLAGS_ISFIXEDLENGTH) odtLog <<L"ISFIXEDLENGTH ";
if (dbColumnInfo[ulIndex].dwFlags & DBCOLUMNFLAGS_ISLONG) odtLog <<L"ISLONG ";
if (dbColumnInfo[ulIndex].dwFlags & DBCOLUMNFLAGS_ISNULLABLE) odtLog <<L"ISNULLABLE ";
if (dbColumnInfo[ulIndex].dwFlags & DBCOLUMNFLAGS_ISROWID) odtLog <<L"ISROWID ";
if (dbColumnInfo[ulIndex].dwFlags & DBCOLUMNFLAGS_ISROWVER) odtLog <<L"ISROWVER ";
if (dbColumnInfo[ulIndex].dwFlags & DBCOLUMNFLAGS_MAYBENULL) odtLog <<L"MAYBENULL ";
if (dbColumnInfo[ulIndex].dwFlags & DBCOLUMNFLAGS_MAYDEFER) odtLog <<L"MAYDEFER ";
if (dbColumnInfo[ulIndex].dwFlags & DBCOLUMNFLAGS_WRITE) odtLog <<L"WRITE ";
if (dbColumnInfo[ulIndex].dwFlags & DBCOLUMNFLAGS_WRITEUNKNOWN) odtLog <<L"WRITEUNKNOWN";
odtLog <<ENDL;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Init
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL IColInfo::Init(EINTERFACE eInterface)
{
WCHAR * pwszColList=NULL;
if (COLEDB::Init())
{
// Have this testcase use the table created in ModuleInit, but don't
// let table be deleted, since we'll use it for next test case
SetTable((CTable *)m_pThisTestModule->m_pVoid, DELETETABLE_NO);
// Create a second table for the Join variations
m_pTable2 = new CTable((IUnknown *)m_pThisTestModule->m_pIUnknown2, (LPWSTR)gwszModuleName);
if (!SUCCEEDED(m_pTable2->CreateTable(0,1,NULL,PRIMARY,TRUE)))
return FALSE;
m_cOrdTbl2 = m_pTable2->CountColumnsOnTable();
if(m_cOrdTbl2)
{
m_pTable2->CreateColList(FORWARD, &pwszColList, &m_cOrdTbl2, &m_prgOrdTbl2);
PROVIDER_FREE(pwszColList);
}
// Set DSO pointer
if (m_pThisTestModule->m_pIUnknown)
{
if(!VerifyInterface(m_pThisTestModule->m_pIUnknown, IID_IDBInitialize, DATASOURCE_INTERFACE, (IUnknown**)&m_pIDBInitialize))
return FALSE;
}
if (m_pIDBInitialize)
m_pMyIDBInitialize = m_pIDBInitialize;
// Create Data Source Object, Initialize, and get a IOpenRowset pointer.
SetDBSession(m_pThisTestModule->m_pIUnknown2);
// Fill in the Ordinals
if (eInterface == ROWSET_INTERFACE)
{
m_cOrdTbl1 = m_pTable->CountColumnsOnTable();
if(m_cOrdTbl1)
{
m_pTable->CreateColList(FORWARD, &pwszColList, &m_cOrdTbl1, &m_prgOrdTbl1);
PROVIDER_FREE(pwszColList);
}
}
// Make sure base classes are working
if ((!m_pIDBCreateCommand) && (eInterface == COMMAND_INTERFACE))
{
odtLog << L"Commands not supported by Provider." << ENDL;
return TEST_SKIPPED;
}
if (!GetPreparation())
return FALSE;
return TRUE;
}
return FALSE;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Terminate
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL IColInfo::Terminate()
{
COLEDB::Terminate();
SAFE_RELEASE(m_pIDBInitialize);
PROVIDER_FREE(m_prgOrdTbl1);
PROVIDER_FREE(m_prgOrdTbl2);
m_cOrdTbl1 = 0;
m_cOrdTbl2 = 0;
// Drop the second table
if(m_pTable2)
CHECK(m_pTable2->DropTable(),S_OK);
SAFE_DELETE(m_pTable2);
// Release session object
ReleaseDBSession();
SAFE_DELETE(m_pCRowObj);
SAFE_DELETE(m_pCRowset);
return(CTestCases::Terminate());
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Init, inorder to clear properties, need to get rid of ICommand object
// and get new ICommand Object
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL IColInfo::Init_Var()
{
// Don't check columninfo by default
m_fCheckIColumnsInfo = TRUE;
// Reset Params
m_cRowsAffected = 0;
m_cColumns = 0;
m_DBPROPID = 0;
m_cColumnIDs = 0;
m_cPropSets = 0;
m_rgPropSets = NULL;
m_hr = E_FAIL;
// Check for Commands
if (m_pIDBCreateCommand)
if (FAILED(m_pIDBCreateCommand->CreateCommand(NULL,IID_ICommand,(IUnknown **)&m_pICommand)))
return FALSE;
// Initialize to the Command Object
m_pIUnknown = m_pICommand;
return TRUE;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Free_
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL IColInfo::Free(BOOL fFreeIColInfo)
{
// Release
if(fFreeIColInfo)
{
SAFE_RELEASE(m_pIColumnsInfo);
SAFE_RELEASE(m_pIColumnsInfo2);
}
SAFE_RELEASE(m_pIRowset);
SAFE_RELEASE(m_pICommand);
if (m_rgInfo == INVALID(DBCOLUMNINFO*))
m_rgInfo = NULL;
if (m_rgInfo2 == INVALID(DBCOLUMNINFO*))
m_rgInfo2 = NULL;
if (m_pStringsBuffer == INVALID(WCHAR*))
m_pStringsBuffer = NULL;
if (m_rgColumnIDs2!=INVALID(DBID*))
SAFE_FREE(m_rgColumnIDs2)
else
m_rgColumnIDs2 = NULL;
if (m_rgColumns!=INVALID(DBORDINAL*))
SAFE_FREE(m_rgColumns)
else
m_rgColumns = NULL;
if (m_rgColumnIDs!=INVALID(DBID*))
SAFE_FREE(m_rgColumnIDs)
else
m_rgColumnIDs = NULL;
if (m_rgMasks!=INVALID(DBID*))
SAFE_FREE(m_rgMasks)
else
m_rgMasks = NULL;
FreeColumnInfo(&m_cColumns, &m_rgInfo, &m_pStringsBuffer);
FreeColumnInfo(&m_cColumns2,&m_rgInfo2,&m_pStringsBuffer);
FreeProperties(&m_cPropSets, &m_rgPropSets);
return TRUE;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Free_
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL IColInfo::FreeColumnInfo(DBORDINAL* pcColumns,DBCOLUMNINFO** prgInfo, OLECHAR** pStringsBuffer)
{
TBEGIN;
// Check to see if we need to free the buffer
if( prgInfo )
SAFE_FREE(*prgInfo);
if( pStringsBuffer )
SAFE_FREE(*pStringsBuffer);
return TRUE;
}
/// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// ExecuteMethod_row
//
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HRESULT IColInfo::ExecuteMethod_row
(
BOOL fcColumnIDs,
BOOL frgColumnIDs,
BOOL frgColumns,
STATEMENTKIND StmtKd,
EQUERY sqlStmt,
WCHAR * pStmt,
EPREPARE ePrepare,
ULONG cExpectedRuns,
DBPROPID prop
)
{
HRESULT hr = E_FAIL;
IID riid = IID_IRowset;
// Make sure we cleanup
SAFE_RELEASE(m_pIColumnsInfo);
PROVIDER_FREE(m_prgOrdTbl1);
m_cOrdTbl1 = 0;
// SetText
if (FAILED(hr=SetCommandText(m_pIMalloc,m_pICommand,m_pTable,m_pTable2->GetTableName(),
StmtKd,sqlStmt,pStmt,&m_cOrdTbl1,&m_prgOrdTbl1)))
goto CLEANUP;
// Set property if writable
if (SettableProperty(prop, DBPROPSET_ROWSET, m_pIDBInitialize))
CHECK(hr=SetRowsetProperty(m_pICommand,DBPROPSET_ROWSET,prop),S_OK);
else
{
// If the Property is ReadOnly and the value is the same exp. S_OK
if (GetProperty(prop, DBPROPSET_ROWSET, m_pICommand))
CHECK(hr=SetRowsetProperty(m_pICommand,DBPROPSET_ROWSET,prop),S_OK);
else
{
hr=SetRowsetProperty(m_pICommand,DBPROPSET_ROWSET,prop);
if(SUCCEEDED(hr))
{
CHECKW(hr, DB_E_ERRORSOCCURRED);
odtLog <<wszPropertySet;
}
else
CHECK(hr, DB_E_ERRORSOCCURRED);
}
}
if (m_Method == MAPCOLID)
{
if (FAILED(hr=GetDBIDs(fcColumnIDs,frgColumnIDs,frgColumns,cExpectedRuns)))
goto CLEANUP;
}
// Prepare the Statement
if ((m_ePreparation == SUPPORTED) &&
(FAILED(hr=PrepareCommand(m_pICommand,PREPARE,cExpectedRuns))))
goto CLEANUP;
if (FAILED(hr=m_pICommand->Execute(NULL,riid,NULL,
&m_cRowsAffected,(IUnknown **) &m_pIRowset)))
goto CLEANUP;
if (FAILED(hr=m_pIRowset->QueryInterface(IID_IColumnsInfo,(void **)&m_pIColumnsInfo)))
goto CLEANUP;
if (m_Method == GETCOLINFO)
return hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns,&m_rgInfo,&m_pStringsBuffer);
else if (m_Method == MAPCOLID)
return hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,m_rgColumnIDs,m_rgColumns);
CLEANUP:
odtLog << wszTestFailure;
return hr;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// ExecuteMethod_cmd
//
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HRESULT IColInfo::ExecuteMethod_cmd
(
BOOL fcColumnIDs,
BOOL frgColumnIDs,
BOOL frgColumns,
STATEMENTKIND StmtKd,
EQUERY sqlStmt,
WCHAR * pStmt,
EPREPARE ePrepare,
ULONG cExpectedRuns,
DBPROPID prop,
BOOL fSingSel
)
{
HRESULT hr = E_FAIL;
// Make sure we cleanup
SAFE_RELEASE(m_pIColumnsInfo);
PROVIDER_FREE(m_prgOrdTbl1);
m_cOrdTbl1 = 0;
// ICommandText::SetCommandText
if (FAILED(hr=SetCommandText(m_pIMalloc,m_pICommand,m_pTable,m_pTable2->GetTableName(),
StmtKd,sqlStmt,pStmt,&m_cOrdTbl1,&m_prgOrdTbl1)))
goto CLEANUP;
// Set property if writable
if(prop)
{
if (SettableProperty(prop, DBPROPSET_ROWSET, m_pIDBInitialize))
CHECK(hr=SetRowsetProperty(m_pICommand,DBPROPSET_ROWSET,prop),S_OK);
else
{
// If the Property is ReadOnly and the value is the same exp. S_OK
if (GetProperty(prop, DBPROPSET_ROWSET, m_pICommand))
CHECK(hr=SetRowsetProperty(m_pICommand,DBPROPSET_ROWSET,prop),S_OK);
else
{
hr=SetRowsetProperty(m_pICommand,DBPROPSET_ROWSET,prop);
if(SUCCEEDED(hr))
{
CHECKW(hr, DB_E_ERRORSOCCURRED);
odtLog <<wszPropertySet;
}
else
CHECK(hr, DB_E_ERRORSOCCURRED);
}
}
}
// Get an IColumnsInfo pointer
if(fSingSel)
{
TESTC(GetRowIColumnsInfo(m_pICommand, (IUnknown**)&m_pIColumnsInfo))
}
else
{
//Get IColumnsInfo off the command object
if (FAILED(hr=m_pICommand->QueryInterface(IID_IColumnsInfo,(void **) &m_pIColumnsInfo)))
goto CLEANUP;
}
if (m_Method == MAPCOLID)
{
if (FAILED(hr=GetDBIDs(fcColumnIDs,frgColumnIDs,frgColumns,cExpectedRuns, !fSingSel)))
goto CLEANUP;
}
// Prepare the Statement
if ((m_ePreparation == SUPPORTED) && (!fSingSel) &&
(FAILED(hr=PrepareCommand(m_pICommand,ePrepare,cExpectedRuns))))
goto CLEANUP;
if (m_Method == GETCOLINFO)
{
hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns,&m_rgInfo,&m_pStringsBuffer);
if(SUCCEEDED(hr))
{
// Adjust the column count for Joins
if((sqlStmt == SELECT_LEFTOUTERJOIN) || (sqlStmt == SELECT_RIGHTOUTERJOIN))
COMPARE(m_cColumns, DBORDINAL((m_cOrdTbl1 + m_cOrdTbl2) + (m_cColumns ? !m_rgInfo[0].iOrdinal : 0)));
else
COMPARE(m_cColumns, DBORDINAL(m_cOrdTbl1 + (m_cColumns ? !m_rgInfo[0].iOrdinal : 0)));
}
}
else if (m_Method == MAPCOLID)
hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,m_rgColumnIDs,m_rgColumns);
else
hr=E_FAIL;
CLEANUP:
return hr;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// GetRowFromRowset
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL IColInfo::GetRowFromRowset(BOOL bColInfo2)
{
TBEGIN
HRESULT hr = E_FAIL;
BOOL bRowSup = FALSE;
ULONG_PTR ulOleObj = 0;
ULONG_PTR ulDSType = 0;
DBCOUNTITEM cRowsObtained = 0;
HROW* rghRows = NULL;
//Required for using some ExtraLib functions.
g_pIDBInitialize = m_pIDBInitialize;
g_pIOpenRowset = m_pIOpenRowset;
//Check if provider supports ROW Objects. If not, then SKIP
//this test case.
if(GetProperty(DBPROP_OLEOBJECTS, DBPROPSET_DATASOURCEINFO,
m_pIDBInitialize, &ulOleObj))
{
if((ulOleObj & DBPROPVAL_OO_ROWOBJECT) == DBPROPVAL_OO_ROWOBJECT)
bRowSup = TRUE;
}
if(GetProperty(DBPROP_DATASOURCE_TYPE, DBPROPSET_DATASOURCEINFO,
m_pIDBInitialize, &ulDSType))
{
if(ulDSType & DBPROPVAL_DST_DOCSOURCE)
m_fDocSource = TRUE;
}
m_pCRowset = new CRowset();
//Create the parent Rowset of the row objects used for testing
//in the variations.
m_pCRowset->SetProperty(DBPROP_CANHOLDROWS);
m_pCRowset->SetProperty(DBPROP_IRowsetIdentity);
m_pCRowset->SetSettableProperty(DBPROP_IRowsetLocate);
TESTC_(m_pCRowset->CreateRowset(USE_OPENROWSET, IID_IRowset, m_pTable),S_OK);
TESTC_(m_pCRowset->RestartPosition(),S_OK)
TESTC_(m_pCRowset->GetNextRows(0, 1, &cRowsObtained, &rghRows),S_OK)
m_pCRowObj = new CRowObject();
TEST3C_(hr = m_pCRowObj->CreateRowObject(m_pCRowset->pIRowset(),
rghRows[0]), S_OK, DB_S_NOROWSPECIFICCOLUMNS, E_NOINTERFACE)
if(bRowSup)
TEST2C_(hr, S_OK, DB_S_NOROWSPECIFICCOLUMNS)
else
{
if(E_NOINTERFACE == hr)
TESTC_PROVIDER(FALSE) // ROW objects are not supported.
else
COMPAREW(FAILED(hr), TRUE);
}
if(bColInfo2)
TESTC_PROVIDER(VerifyInterface(m_pCRowObj->pIRow(), IID_IColumnsInfo2,
ROW_INTERFACE, (IUnknown**)&m_pIColumnsInfo2))
else
TESTC(VerifyInterface(m_pCRowObj->pIRow(), IID_IColumnsInfo,
ROW_INTERFACE, (IUnknown**)&m_pIColumnsInfo))
TESTC(VerifyInterface(m_pCRowset->pIRowset(), IID_IUnknown,
ROWSET_INTERFACE, (IUnknown**)&m_pIUnknown))
CLEANUP:
SAFE_FREE(rghRows);
TRETURN
} //GetRowFromRowset
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// GetRowFromCommand
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL IColInfo::GetRowFromCommand(BOOL bColInfo2)
{
TBEGIN
HRESULT hr = E_FAIL;
BOOL bRowSup = FALSE;
ULONG_PTR ulOleObj = 0;
ULONG_PTR ulDSType = 0;
DBROWCOUNT cRowsAffected = 0;
IRow* pIRow = NULL;
//Required for using some ExtraLib functions.
g_pIDBInitialize = m_pIDBInitialize;
g_pIOpenRowset = m_pIOpenRowset;
//Check if provider supports ROW Objects. If not, then SKIP
//this test case.
if(GetProperty(DBPROP_OLEOBJECTS, DBPROPSET_DATASOURCEINFO,
m_pIDBInitialize, &ulOleObj))
{
if((ulOleObj & DBPROPVAL_OO_SINGLETON) == DBPROPVAL_OO_SINGLETON)
bRowSup = TRUE;
}
if(GetProperty(DBPROP_DATASOURCE_TYPE, DBPROPSET_DATASOURCEINFO,
m_pIDBInitialize, &ulDSType))
{
if(ulDSType & DBPROPVAL_DST_DOCSOURCE)
m_fDocSource = TRUE;
}
TESTC_PROVIDER(m_pIDBCreateCommand)
TESTC_(m_pIDBCreateCommand->CreateCommand(NULL,IID_ICommand,
(IUnknown **)&m_pICommand), S_OK)
// SetText
TESTC_(SetCommandText(m_pIMalloc,m_pICommand,m_pTable,m_pTable2->GetTableName(),
eSELECT,SELECT_ALLFROMTBL,NULL,&m_cOrdTbl1,&m_prgOrdTbl1), S_OK)
// Prepare the Statement
if (m_ePreparation == SUPPORTED)
TESTC_(PrepareCommand(m_pICommand,PREPARE,1), S_OK)
TEST3C_(hr = m_pICommand->Execute(NULL,IID_IRow,NULL, &cRowsAffected,
(IUnknown **) &pIRow), S_OK, DB_S_NOTSINGLETON, E_NOINTERFACE)
if(bRowSup)
TEST2C_(hr, S_OK, DB_S_NOTSINGLETON)
else
{
if(E_NOINTERFACE == hr)
TESTC_PROVIDER(FALSE) // ROW objects are not supported.
else
COMPAREW(FAILED(hr), TRUE);
}
m_pCRowObj = new CRowObject();
TESTC_(m_pCRowObj->SetRowObject(pIRow), S_OK)
if(bColInfo2)
TESTC_PROVIDER(VerifyInterface(m_pCRowObj->pIRow(), IID_IColumnsInfo2,
ROW_INTERFACE, (IUnknown**)&m_pIColumnsInfo2))
else
TESTC(VerifyInterface(m_pCRowObj->pIRow(), IID_IColumnsInfo,
ROW_INTERFACE, (IUnknown**)&m_pIColumnsInfo))
TESTC(VerifyInterface(m_pICommand, IID_IUnknown,
COMMAND_INTERFACE, (IUnknown**)&m_pIUnknown))
CLEANUP:
SAFE_RELEASE(pIRow);
SAFE_RELEASE(m_pICommand);
TRETURN
} //GetRowFromCommand
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// GetRowFromOpenRW
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL IColInfo::GetRowFromOpenRW(BOOL bColInfo2)
{
TBEGIN
HRESULT hr = E_FAIL;
BOOL bRowSup = FALSE;
ULONG_PTR ulOleObj = 0;
ULONG_PTR ulDSType = 0;
DBROWCOUNT cRowsAffected = 0;
IRow* pIRow = NULL;
//Required for using some ExtraLib functions.
g_pIDBInitialize = m_pIDBInitialize;
g_pIOpenRowset = m_pIOpenRowset;
//Check if provider supports ROW Objects. If not, then SKIP
//this test case.
if(GetProperty(DBPROP_OLEOBJECTS, DBPROPSET_DATASOURCEINFO,
m_pIDBInitialize, &ulOleObj))
{
if((ulOleObj & DBPROPVAL_OO_SINGLETON) == DBPROPVAL_OO_SINGLETON)
bRowSup = TRUE;
}
if(GetProperty(DBPROP_DATASOURCE_TYPE, DBPROPSET_DATASOURCEINFO,
m_pIDBInitialize, &ulDSType))
{
if(ulDSType & DBPROPVAL_DST_DOCSOURCE)
m_fDocSource = TRUE;
}
TEST3C_(hr = m_pIOpenRowset->OpenRowset(NULL, &(m_pTable->GetTableID()),
NULL, IID_IRow, 0, NULL, (IUnknown **) &pIRow), S_OK, DB_S_NOTSINGLETON, E_NOINTERFACE)
if(bRowSup)
TEST2C_(hr, S_OK, DB_S_NOTSINGLETON)
else
{
if(E_NOINTERFACE == hr)
TESTC_PROVIDER(FALSE) // ROW objects are not supported.
else
COMPAREW(FAILED(hr), TRUE);
}
m_pCRowObj = new CRowObject();
TESTC_(m_pCRowObj->SetRowObject(pIRow), S_OK)
if(bColInfo2)
TESTC_PROVIDER(VerifyInterface(m_pCRowObj->pIRow(), IID_IColumnsInfo2,
ROW_INTERFACE, (IUnknown**)&m_pIColumnsInfo2))
else
TESTC(VerifyInterface(m_pCRowObj->pIRow(), IID_IColumnsInfo,
ROW_INTERFACE, (IUnknown**)&m_pIColumnsInfo))
TESTC_(hr = m_pIOpenRowset->OpenRowset(NULL, &(m_pTable->GetTableID()),
NULL, IID_IRowset, 0, NULL, (IUnknown **) &m_pIUnknown), S_OK)
CLEANUP:
SAFE_RELEASE(pIRow);
SAFE_RELEASE(m_pICommand);
TRETURN
} //GetRowFromOpenRW
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// GetRowFromBind
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL IColInfo::GetRowFromBind(BOOL bColInfo2)
{
TBEGIN
HRESULT hr = E_FAIL;
BOOL bRowSup = FALSE;
ULONG_PTR ulOleObj = 0;
ULONG_PTR ulDSType = 0;
ULONG cPropSets = 0;
DBPROPSET* rgPropSets = NULL;
DBROWCOUNT cRowsAffected = 0;
IRow* pIRow = NULL;
IBindResource* pIBR = NULL;
IDBBinderProperties* pIDBBP = NULL;
//Required for using some ExtraLib functions.
g_pIDBInitialize = m_pIDBInitialize;
g_pIOpenRowset = m_pIOpenRowset;
//Check if provider supports direct binding.
TESTC_PROVIDER(GetProperty(DBPROP_OLEOBJECTS, DBPROPSET_DATASOURCEINFO,
m_pIDBInitialize, &ulOleObj) &&
((ulOleObj & DBPROPVAL_OO_DIRECTBIND) == DBPROPVAL_OO_DIRECTBIND))
//Check if provider supports ROW Objects. If not, then SKIP
//this test case.
if((ulOleObj & DBPROPVAL_OO_ROWOBJECT) == DBPROPVAL_OO_ROWOBJECT)
bRowSup = TRUE;
if(GetProperty(DBPROP_DATASOURCE_TYPE, DBPROPSET_DATASOURCEINFO,
m_pIDBInitialize, &ulDSType))
{
if(ulDSType & DBPROPVAL_DST_DOCSOURCE)
m_fDocSource = TRUE;
}
if(GetModInfo()->GetRootBinder())
{
TESTC_PROVIDER(VerifyInterface(GetModInfo()->GetRootBinder(), IID_IBindResource,
BINDER_INTERFACE, (IUnknown**)&pIBR))
TESTC(VerifyInterface(pIBR, IID_IDBBinderProperties,
BINDER_INTERFACE, (IUnknown**)&pIDBBP))
TESTC(GetInitProps(&cPropSets, &rgPropSets))
TESTC_(pIDBBP->SetProperties(cPropSets, rgPropSets), S_OK)
}
else
{
TESTC_PROVIDER(VerifyInterface(m_pIOpenRowset, IID_IBindResource,
SESSION_INTERFACE, (IUnknown**)&pIBR))
}
if(!g_pwszRowURL)
{
g_pwszRowURL = GetModInfo()->GetParseObject()->GetURL(ROW_INTERFACE);
if(!g_pwszRowURL)
g_pwszRowURL = GetModInfo()->GetRootURL();
}
if(!g_pwszRowsetURL)
{
g_pwszRowsetURL = GetModInfo()->GetParseObject()->GetURL(ROWSET_INTERFACE);
if(!g_pwszRowsetURL)
g_pwszRowsetURL = GetModInfo()->GetRootURL();
}
TESTC_PROVIDER(g_pwszRowsetURL && wcslen(g_pwszRowsetURL)>3)
TEST2C_(hr = pIBR->Bind(NULL, g_pwszRowURL, DBBINDURLFLAG_READ, DBGUID_ROW,
IID_IRow, NULL, NULL, NULL, (IUnknown**)&pIRow), S_OK, DB_E_NOTSUPPORTED)
if(bRowSup)
{
TESTC_(hr, S_OK)
TESTC(pIRow != NULL)
}
else
{
if(DB_E_NOTSUPPORTED == hr)
TESTC_PROVIDER(FALSE) // ROW objects are not supported.
else
COMPAREW(FAILED(hr), TRUE);
}
TESTC_(pIBR->Bind(NULL, g_pwszRowsetURL, DBBINDURLFLAG_READ, DBGUID_ROWSET,
IID_IUnknown, NULL, NULL, NULL, (IUnknown**)&m_pIUnknown), S_OK)
TESTC(m_pIUnknown != NULL)
m_pCRowObj = new CRowObject();
TESTC_(m_pCRowObj->SetRowObject(pIRow), S_OK)
if(bColInfo2)
TESTC_PROVIDER(VerifyInterface(m_pCRowObj->pIRow(), IID_IColumnsInfo2,
ROW_INTERFACE, (IUnknown**)&m_pIColumnsInfo2))
else
TESTC(VerifyInterface(m_pCRowObj->pIRow(), IID_IColumnsInfo,
ROW_INTERFACE, (IUnknown**)&m_pIColumnsInfo))
CLEANUP:
FreeProperties(&cPropSets, &rgPropSets);
SAFE_RELEASE(pIDBBP);
SAFE_RELEASE(pIRow);
SAFE_RELEASE(pIBR);
TRETURN
} //GetRowFromBind
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// CallMethodOnRowObj
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL IColInfo::GetRowIColumnsInfo(ICommand* pIC, IUnknown** ppICI)
{
TBEGIN
IRow* pIRow = NULL;
TESTC(pIC && ppICI)
//Get IColumnsInfo off the row object
if(m_ePreparation == SUPPORTED)
TESTC(SUCCEEDED(PrepareCommand(pIC,PREPARE,0)))
TESTC(SUCCEEDED(pIC->Execute(NULL, IID_IRow, NULL, NULL, (IUnknown**)&pIRow)))
TESTC(VerifyInterface(pIRow, IID_IColumnsInfo, ROW_INTERFACE, (IUnknown**)ppICI))
CLEANUP:
SAFE_RELEASE(pIRow);
TRETURN
} //GetRowIColumnsInfo
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// CallMethodOnRowObj
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HRESULT IColInfo::CallMethodOnRowObj(BOOL bColInfo2, METHOD_CHOICE method)
{
HRESULT hr = E_FAIL;
METHOD_CHOICE methodused = INVALID_METHOD;
TESTC(m_pCRowObj != NULL)
if(method==INVALID_METHOD)
methodused = m_Method;
else
methodused = method;
switch (methodused)
{
case GETCOLINFO:
if(bColInfo2)
hr = m_pIColumnsInfo2->GetColumnInfo(&m_cColumns2,&m_rgInfo2,&m_pStringsBuffer);
else
hr = m_pIColumnsInfo->GetColumnInfo(&m_cColumns2,&m_rgInfo2,&m_pStringsBuffer);
break;
case MAPCOLID:
if(bColInfo2)
hr = m_pIColumnsInfo2->MapColumnIDs(m_cColumnIDs,m_rgColumnIDs,m_rgColumns);
else
hr = m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,m_rgColumnIDs,m_rgColumns);
break;
case GETRESCOLINFO:
hr = m_pIColumnsInfo2->GetRestrictedColumnInfo(m_cMasks, m_rgMasks, 0, &m_cColumns2,&m_rgColumnIDs2,&m_rgInfo2,&m_pStringsBuffer);
if(hr == DB_E_NOCOLUMN)
odtLog<<L"INFO: No column matched the given mask.\n";
break;
default:
TESTC(methodused==GETCOLINFO)
break;
} //switch
TESTC(CheckParams(hr, methodused))
if(GETRESCOLINFO==methodused && S_OK==hr && (m_rgInfo2!=NULL) && (m_rgColumnIDs2!=NULL))
for(DBORDINAL ulIndex=0; ulIndex<m_cColumns2; ulIndex++)
COMPARE(CompareDBID(m_rgColumnIDs2[ulIndex], m_rgInfo2[ulIndex].columnid), TRUE);
CLEANUP:
return hr;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// CheckParams
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL IColInfo::CheckParams(HRESULT hr, METHOD_CHOICE method)
{
TBEGIN
switch (method)
{
case GETCOLINFO:
if(S_OK==hr)
{
if(m_cColumns2)
TESTC(m_rgInfo2!=NULL && m_pStringsBuffer!=NULL)
else
{
TESTC(!m_rgInfo2 && !m_pStringsBuffer)
odtLog<<L"WARNING: No columns were returned by GetColumnInfo.\n";
}
}
else //if FAILED(hr)
{
TESTC(!m_cColumns2 && !m_rgInfo2 && !m_pStringsBuffer)
}
break;
case MAPCOLID:
break;
case GETRESCOLINFO:
if(S_OK == hr) //This is the only success code now.
{
TESTC(m_cColumns2>0 && m_pStringsBuffer!=NULL)
TESTC(m_rgColumnIDs2!=NULL || m_rgInfo2!=NULL)
}
else
TESTC(!m_cColumns2 && !m_rgColumnIDs2 && !m_rgInfo2 && !m_pStringsBuffer);
break;
default:
TESTC(m_Method==GETCOLINFO)
break;
} //switch
CLEANUP:
TRETURN
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// CheckRowSpecificColumns
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL IColInfo::CheckRowSpecificColumns(DBORDINAL cCols, DBCOLUMNINFO* rgInfo, DBORDINAL ulFirstOrd)
{
TBEGIN
DBORDINAL ulIndex=0;
if(cCols==0)
goto CLEANUP;
else
TESTC(cCols>0 && rgInfo!=NULL)
for(ulIndex=0; ulIndex<cCols; ulIndex++)
{
COMPARE(rgInfo[ulIndex].iOrdinal, ulFirstOrd+ulIndex);
COMPARE(rgInfo[ulIndex].columnid.eKind == DBKIND_GUID_NAME ||
rgInfo[ulIndex].columnid.eKind == DBKIND_GUID_PROPID ||
rgInfo[ulIndex].columnid.eKind == DBKIND_NAME ||
rgInfo[ulIndex].columnid.eKind == DBKIND_PROPID ||
rgInfo[ulIndex].columnid.eKind == DBKIND_GUID , TRUE);
COMPARE(rgInfo[ulIndex].dwFlags & DBCOLUMNFLAGS_ROWSPECIFICCOLUMN, DBCOLUMNFLAGS_ROWSPECIFICCOLUMN);
}
CLEANUP:
TRETURN
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// VerifyRestrictions
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL IColInfo::VerifyRestrictions()
{
TBEGIN
DBORDINAL iCol=0;
if(!m_cMasks && !m_rgMasks)
return TRUE;
else
TESTC(m_cMasks>0 && m_rgMasks!=NULL)
if(!m_rgInfo2 && !m_rgColumnIDs2)
{
TESTC(!m_pStringsBuffer)
odtLog<<L"INFO: No columns matched the restriction(s) provided.\n";
return TRUE;
}
else
{
TESTC(m_cColumns2>0 && m_pStringsBuffer!=NULL)
TESTC(m_rgColumnIDs2!=NULL || m_rgInfo2!=NULL)
}
for(iCol=0; iCol<m_cColumns2; iCol++)
{
BOOL bMatch = FALSE;
//if(m_rgInfo2[iCol].pwszName)
// COMPARE(wcscmp(m_rgInfo2[iCol].pwszName, m_rgInfo2[iCol].columnid.uName.pwszName), 0);
if((iCol>0) && (m_rgInfo2 != NULL))
COMPARE(m_rgInfo2[iCol].iOrdinal > m_rgInfo2[iCol-1].iOrdinal, TRUE);
for(DBORDINAL iMask=0; iMask<m_cMasks && !bMatch; iMask++)
{
WCHAR* pwszTemp = NULL;
const DBID* pColumnID = &(m_rgInfo2[iCol].columnid);
if(m_rgInfo2)
pColumnID = &(m_rgInfo2[iCol].columnid);
else
pColumnID = &(m_rgColumnIDs2[iCol]);
const DBID* pColumnMask = &m_rgMasks[iMask];
DBKIND eKind = pColumnID->eKind;
//Types ofcourse must match...
if(eKind != pColumnMask->eKind)
continue;
switch(eKind)
{
case DBKIND_GUID_NAME:
if((pColumnID->uGuid.guid == pColumnMask->uGuid.guid) &&
(pColumnID->uName.pwszName))
{
pwszTemp = wcsstr(pColumnID->uName.pwszName, pColumnMask->uName.pwszName);
if(pwszTemp && (wcscmp(pwszTemp, pColumnID->uName.pwszName)==0))
bMatch = TRUE;
}
break;
case DBKIND_GUID_PROPID:
if((pColumnID->uGuid.guid == pColumnMask->uGuid.guid) &&
(pColumnID->uName.ulPropid == pColumnMask->uName.ulPropid))
bMatch = TRUE;
break;
case DBKIND_NAME:
if(pColumnID->uName.pwszName)
{
pwszTemp = wcsstr(pColumnID->uName.pwszName, pColumnMask->uName.pwszName);
if(pwszTemp && (wcscmp(pwszTemp, pColumnID->uName.pwszName)==0))
bMatch = TRUE;
}
break;
case DBKIND_PGUID_NAME:
if((!pColumnID->uGuid.pguid && pColumnMask->uGuid.pguid) ||
(pColumnID->uGuid.pguid && !pColumnMask->uGuid.pguid) )
continue;
if(pColumnID->uGuid.pguid && pColumnMask->uGuid.pguid &&
*pColumnID->uGuid.pguid != *pColumnMask->uGuid.pguid)
continue;
if(pColumnID->uName.pwszName)
{
pwszTemp = wcsstr(pColumnID->uName.pwszName, pColumnMask->uName.pwszName);
if(pwszTemp && (wcscmp(pwszTemp, pColumnID->uName.pwszName)==0))
bMatch = TRUE;
}
break;
case DBKIND_PGUID_PROPID:
if((!pColumnID->uGuid.pguid && pColumnMask->uGuid.pguid) ||
(pColumnID->uGuid.pguid && !pColumnMask->uGuid.pguid) )
continue;
if(pColumnID->uGuid.pguid && pColumnMask->uGuid.pguid &&
*pColumnID->uGuid.pguid != *pColumnMask->uGuid.pguid)
continue;
if(pColumnID->uName.ulPropid == pColumnMask->uName.ulPropid)
bMatch = TRUE;
break;
case DBKIND_PROPID:
if(pColumnID->uName.ulPropid == pColumnMask->uName.ulPropid)
bMatch = TRUE;
break;
case DBKIND_GUID:
if(pColumnID->uGuid.guid == pColumnMask->uGuid.guid)
bMatch = TRUE;
break;
default:
//should not get here.
COMPARE(TRUE, FALSE);
break;
}//switch
}
//Make sure we found a match for every column returned.
TESTC(bMatch)
}
CLEANUP:
TRETURN
} //VerifyRestrictions
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// GetDBIDs
//
// Take DBID part of DBCOLUMNINFO and build array of DBIDs
//
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HRESULT IColInfo::GetDBIDs(
BOOL fcColumnIDs,
BOOL frgColumnIDs,
BOOL frgColumns,
ULONG cExpectedRuns,
BOOL fPrep
)
{
HRESULT hr = E_FAIL;
IColumnsInfo * pIColumnsInfo = NULL;
if (!m_pICommand)
return FALSE;
if (FAILED(hr=m_pICommand->QueryInterface(IID_IColumnsInfo,
(void **)&pIColumnsInfo)))
return hr;
// Prepare the Statement
if ((m_ePreparation == SUPPORTED) && (fPrep) &&
(FAILED(hr=PrepareCommand(m_pICommand,PREPARE,cExpectedRuns))))
goto CLEANUP;
if (!m_cColumns)
if (FAILED(hr=pIColumnsInfo->GetColumnInfo(&m_cColumns,
&m_rgInfo, &m_pStringsBuffer)))
goto CLEANUP;
// Make array of DBIDs
if (FAILED(hr=MakeDBIDArrays(fcColumnIDs,frgColumnIDs,frgColumns)))
goto CLEANUP;
// Prepare the Statement
if (m_ePreparation==SUPPORTED && fPrep)
hr=PrepareCommand(m_pICommand,UNPREPARE,cExpectedRuns);
CLEANUP:
SAFE_RELEASE(pIColumnsInfo);
return hr;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// MakeDBIDArrays
//
// Take DBID part of DBCOLUMNINFO and build array of DBIDs
//
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HRESULT IColInfo::MakeDBIDArrays(
BOOL fcColumnIDs,
BOOL frgColumnIDs,
BOOL frgColumns
)
{
// Make array of DBIDs
if (m_cColumns)
{
if (frgColumnIDs)
{
// Allocate memory for the array of DBID's
m_rgColumnIDs = (DBID *) PROVIDER_ALLOC(sizeof(DBID) * m_cColumns);
if (!m_rgColumnIDs) goto CLEANUP;
// Copy values into members
for(DBORDINAL ulIndex=0; ulIndex<m_cColumns; ulIndex++)
memcpy(&(m_rgColumnIDs[ulIndex]),&(m_rgInfo[ulIndex].columnid),sizeof(DBID));
}
if (frgColumns)
{
// Allocate memory for the array of DBID's
m_rgColumns = (DBORDINAL *) PROVIDER_ALLOC(sizeof(DBORDINAL) * m_cColumns);
if (!m_rgColumns) goto CLEANUP;
// Copy values into members
for(DBORDINAL ulIndex=0; ulIndex<m_cColumns; ulIndex++)
m_rgColumns[ulIndex] = INVALID(DBORDINAL);
}
// Set count of DBID's
if (fcColumnIDs)
m_cColumnIDs = m_cColumns;
return NOERROR;
}
CLEANUP:
return E_FAIL;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// CheckOrdinal
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL IColInfo::CheckOrdinal(HRESULT hr, BOOL bCheckOrder)
{
ULONG cErrors = 0;
DBORDINAL cUnInit = 0;
// Loop thru the IDs to see if there is an invalid one
for(DBORDINAL ulIndex = 0; ulIndex < m_cColumnIDs; ulIndex++)
{
// Set to the count on E_INVALIDARG
if( !m_rgColumns )
{
cUnInit = m_cColumnIDs;
break;
}
if( m_rgColumns[ulIndex] == DB_INVALIDCOLUMN )
cErrors++;
if( m_rgColumns[ulIndex] == INVALID(DBORDINAL) )
cUnInit++;
}
if((S_OK==hr) && bCheckOrder) {
for(DBORDINAL ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
DBORDINAL ulFirst;
// Get the Oridinal
for(ulFirst=0; ulFirst<m_cColumns; ulFirst++)
{
if( CompareDBID(m_rgColumnIDs[ulIndex],
m_rgInfo[ulFirst].columnid) )
break;
}
// Compare the ordinal
if( m_rgColumns[ulIndex] )
COMPARE(m_rgColumns[ulIndex], m_rgInfo[ulFirst].iOrdinal);
}
}
// Check the ReturnCode
switch( hr )
{
case S_OK:
TESTC(!cErrors);
TESTC(!cUnInit);
break;
case DB_S_ERRORSOCCURRED:
TESTC(cErrors > 0);
TESTC(!cUnInit);
TESTC(cErrors < m_cColumnIDs);
break;
case DB_E_ERRORSOCCURRED:
TESTC(cErrors > 0);
TESTC(!cUnInit);
TESTC(cErrors == m_cColumnIDs);
break;
default:
TESTC(!cErrors);
TESTC(cUnInit > 0);
TESTC(cUnInit == m_cColumnIDs);
break;
}
return TRUE;
CLEANUP:
return FALSE;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// @mfunc General Compare routine that handles each part of the
// DBCOLUMNINFO struct and the return code
//
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IColInfo::CheckEachColumn
(
HRESULT hr,
DBPROPID PropID,
EQUERY eSQLStmt
)
{
CCol ccol;
CTable * pLocalCTable = NULL;
DBORDINAL cLocalOrd = 0;
DB_LORDINAL* pLocalrgOrd = NULL;
DBORDINAL ulCount = 0;
// If Success with a positive column count
if (SUCCEEDED(hr) && m_cColumns)
{
// If on the Rowset change to the Rowset Object
if (m_pIRowset)
m_pIUnknown = m_pIRowset;
//TO DO - if PropID==IRowsetLocate OR BOOKMARKS, then first
//ordinal==0.
// If bookmarks are present expect a 0 ordinal
if (GetProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIUnknown))
if(!COMPARE(m_rgInfo[0].iOrdinal, 0))
odtLog<<L"Bookmarks are present but there is no Ordinal 0"<<ENDL;
for(DBORDINAL ulIndex=0;ulIndex<m_cColumns;ulIndex++)
{
// Check for Ordinal 0
if (m_rgInfo[ulIndex].iOrdinal==0)
{
COMPARE(Compare_DBCOLUMNFLAGS_ISBOOKMARK(m_rgInfo[ulIndex], ulIndex),TRUE);
Compare_Columnid(ccol,m_rgInfo[ulIndex],ulIndex,eSQLStmt);
}
else
{
// Change the table for joins
pLocalCTable = (CTable*)((ulCount < m_cOrdTbl1) ? m_pTable : m_pTable2);
pLocalrgOrd = ((ulCount < m_cOrdTbl1) ? m_prgOrdTbl1 : m_prgOrdTbl2);
cLocalOrd = ((ulCount < m_cOrdTbl1) ? m_cOrdTbl1 : m_cOrdTbl2);
// Check the IColumnsInfo data
if ((cLocalOrd) && (eSQLStmt != SELECT_COUNT) &&
(SUCCEEDED(pLocalCTable->GetColInfo(pLocalrgOrd[ulCount%cLocalOrd],ccol))) )
{
Compare_pwszName(ccol,m_rgInfo[ulIndex],ulIndex,eSQLStmt);
Compare_pTypeInfo(ccol,m_rgInfo[ulIndex],ulIndex);
Compare_iOrdinal((DBORDINAL)ulIndex+(m_rgInfo[0].iOrdinal),m_rgInfo[ulIndex],ulIndex);
Compare_ulColumnSize(ccol,m_rgInfo[ulIndex],ulIndex);
Compare_dwType(ccol,m_rgInfo[ulIndex],ulIndex);
Compare_bPrecision(ccol,m_rgInfo[ulIndex],ulIndex);
Compare_bScale(ccol,m_rgInfo[ulIndex],ulIndex);
Compare_Columnid(ccol,m_rgInfo[ulIndex],ulIndex,eSQLStmt);
Compare_DBCOLUMNFLAGS_CACHEDEFERRED(ccol,m_rgInfo[ulIndex],ulIndex);
Compare_DBCOLUMNFLAGS_ISBOOKMARK(m_rgInfo[ulIndex],ulIndex);
Compare_DBCOLUMNFLAGS_ISFIXEDLENGTH(ccol,m_rgInfo[ulIndex],ulIndex);
Compare_DBCOLUMNFLAGS_ISLONG(ccol,m_rgInfo[ulIndex],ulIndex);
Compare_DBCOLUMNFLAGS_ISNULLABLE(ccol,m_rgInfo[ulIndex],ulIndex);
Compare_DBCOLUMNFLAGS_ISROWID(ccol,m_rgInfo[ulIndex],ulIndex);
Compare_DBCOLUMNFLAGS_ISROWVER(ccol,m_rgInfo[ulIndex],ulIndex);
Compare_DBCOLUMNFLAGS_MAYBENULLABLE(ccol,m_rgInfo[ulIndex],ulIndex,eSQLStmt);
Compare_DBCOLUMNFLAGS_MAYDEFER(ccol,m_rgInfo[ulIndex],ulIndex);
Compare_DBCOLUMNFLAGS_WRITE(ccol,m_rgInfo[ulIndex],ulIndex);
}
else
{
odtLog<< L"This is a Calculated column.\n";
PrintInfo(m_rgInfo, ulIndex);
}
// Incement the count
ulCount++;
}
}
}
else if (SUCCEEDED(hr) && (!m_cColumns))
{
// If cColumns is 0, the buffers are NULL
if (m_rgInfo || m_pStringsBuffer)
{
odtLog<< L"ERROR: The rgInfo pointer or pStringsBuffer was not NULL where cColumns was 0.\n";
COMPARE(1, NULL);
}
}
else
COMPARE(IfErrorParmsShouldBeNULL(), TRUE);
}
//--------------------------------------------------------------------
// @mfunc Utility function that checks that the params of
// IColumnsInfo::GetColumnInfo are correctly null if there is
// an error as the return code
//
// hr must be a failure code before coming into this function
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::IfErrorParmsShouldBeNULL()
{
// Check the pointers on ERROR
if (!m_rgInfo && !m_pStringsBuffer && !m_cColumns)
return TRUE;
odtLog<< L"ERROR: The rgInfo pointer or pStringsBuffer was not NULL on a Error.\n";
return FALSE;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.pwszName to the
// column name in CCol.m_pwszColName
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_pwszName(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex,EQUERY eSQLStmt)
{
// Get the Column name
WCHAR wszColumnName[100] = L"";
if( col.GetColName() )
wcscpy(wszColumnName,col.GetColName());
// Check to see if the Column names have been changed
if( eSQLStmt == SELECT_CHANGECOLNAME )
wcscat(wszColumnName,L"X");
// Compare two strings, regarding upper and lower case
if( ((wszColumnName) && (dbColumnInfo.pwszName) &&
(wcscmp(wszColumnName,dbColumnInfo.pwszName) == 0)) ||
(!(*wszColumnName) && !(dbColumnInfo.pwszName)) )
return TRUE;
else
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType <<L" ->NAME]: expected "
<<(*wszColumnName ? wszColumnName : L"<EMPTY>") <<L", returned "<<dbColumnInfo.pwszName <<ENDL;
return FALSE;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares pTypeInfo
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_pTypeInfo(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex)
{
// Reserved
if( COMPARE(dbColumnInfo.pTypeInfo, NULL) )
return TRUE;
else
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType <<L" ->ITYPEINFO]: expected NULL." <<ENDL;
return FALSE;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.iOrdinal to the index.
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_iOrdinal(DBORDINAL iOrdinal, DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex)
{
// Compare the columns Ordinals
if( COMPARE(iOrdinal, dbColumnInfo.iOrdinal) )
return TRUE;
else
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType <<L" ->NUMBER]: expected "
<<iOrdinal <<L", returned " <<dbColumnInfo.iOrdinal <<ENDL;
return FALSE;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.wType to the
// column name in CCol.m_wProviderType
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_dwType(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex)
{
// Compare the Types
if( COMPARE(col.GetProviderType(), dbColumnInfo.wType) )
return TRUE;
else
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType <<L" ->TYPE]: expected "
<<col.GetProviderType() <<L", returned " <<dbColumnInfo.wType <<ENDL;
return FALSE;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.ulColumnSize to the
// column name in CCol.m_lPrecisionUsed
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_ulColumnSize(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex)
{
DBLENGTH ulHolder = ~0;
// Compare ulColumnsize as though it were count of objects
if( IsFixedLength(col.GetProviderType()) )
ulHolder=GetDBTypeSize(col.GetProviderType());
else
ulHolder=col.GetColumnSize();
// Adjust for the VARNUMERIC
if( col.GetProviderType() == DBTYPE_VARNUMERIC )
ulHolder = 20;
// Check the size
if( COMPARE(ulHolder, dbColumnInfo.ulColumnSize) )
return TRUE;
else
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->COLUMNSIZE]: length of column expected "
<<ulHolder <<L", received " <<dbColumnInfo.ulColumnSize <<ENDL;
return FALSE;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.bPrecision to the
// column name in CCol.m_lPrecision
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_bPrecision(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex)
{
BYTE bNumericPrec = ~0;
// Get the Precision of the Column
if( col.GetProviderType() != DBTYPE_DBTIMESTAMP )
bNumericPrec=bNumericPrecision(col.GetProviderType(), col);
else
bNumericPrec=col.GetPrecision();
if( COMPARE(dbColumnInfo.bPrecision, bNumericPrec) )
return TRUE;
else
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->PRECISION]: precision of column expected " <<bNumericPrec
<<L", received " <<dbColumnInfo.bPrecision <<ENDL;
return FALSE;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.bScale to the
// scale in CCol.m_sScale
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_bScale(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex)
{
BYTE bNumericScale = ~0;
// Get the Precision of the Column
if( IsScaleType(col.GetProviderType()) )
bNumericScale=col.GetScale();
if( COMPARE(bNumericScale, dbColumnInfo.bScale) )
return TRUE;
else
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->SCALE]: expects "
<<col.GetScale() <<L", returned "
<<dbColumnInfo.bScale <<ENDL;
return FALSE;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.columnid to the
// column name in CCol.
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_Columnid(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex,EQUERY eSQLStmt)
{
BOOL fSuccess = FALSE;
WCHAR wszColumnName[100] = L"";
DBORDINAL ulOrdinal = 0;
ULONG_PTR ulIDType = 0;
DBID * rgColumnIDs = NULL;
// Get the property value
GetProperty(DBPROP_PERSISTENTIDTYPE, DBPROPSET_DATASOURCEINFO, m_pMyIDBInitialize, &ulIDType);
// Get the Column name
if (col.GetColName())
wcscpy(wszColumnName,col.GetColName());
// This should cover DBKIND_GUID_NAME
if ((dbColumnInfo.columnid).eKind == DBKIND_GUID_NAME)
{
// Check the property value being returned
if (!ulIDType)
odtLog << L"Should return DBPROPVAL_PT_GUID_NAME for DBPROP_PERSISTENTIDTYPE" <<ENDL;
else
COMPARE(ulIDType, DBPROPVAL_PT_GUID_NAME);
// Check to see if the Column names have been changed
if (eSQLStmt == SELECT_CHANGECOLNAME)
wcscat(wszColumnName,L"X");
// Compare two strings, regarding upper and lower case
if (((wszColumnName) && ((dbColumnInfo.columnid).uName.pwszName) &&
(wcscmp(wszColumnName,(dbColumnInfo.columnid).uName.pwszName) == 0)) ||
(!(*wszColumnName) && !((dbColumnInfo.columnid).uName.pwszName)))
return TRUE;
else
{
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType <<L" ->COLUMNID]: expected "
<<(*wszColumnName ? wszColumnName : L"<EMPTY>") <<L", returned "<<(dbColumnInfo.columnid).uName.pwszName <<ENDL;
return FALSE;
}
}
// This should cover DBKIND_GUID_PROPID
else if ((dbColumnInfo.columnid).eKind == DBKIND_GUID_PROPID)
{
// Check the property value being returned
if (!ulIDType)
odtLog << L"Should return DBPROPVAL_PT_GUID_PROPID for DBPROP_PERSISTENTIDTYPE" <<ENDL;
else if (m_rgInfo[ulIndex].iOrdinal)
COMPARE(ulIDType, DBPROPVAL_PT_GUID_PROPID);
// If Bookmark column
if (!m_rgInfo[ulIndex].iOrdinal)
{
// Compare two iOrdinal and ulPropid
if ((2 == (dbColumnInfo.columnid).uName.ulPropid) &&
((dbColumnInfo.columnid).uGuid.guid == DBCOL_SPECIALCOL))
return TRUE;
else
{
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType <<L" ->COLUMNID]: expected "
<<m_rgInfo[ulIndex].iOrdinal <<L", returned "<<(dbColumnInfo.columnid).uName.ulPropid <<ENDL;
return FALSE;
}
}
else
{
// Get the Ordinal back from MapColumnIDs
rgColumnIDs = &dbColumnInfo.columnid;
if(m_pIColumnsInfo)
CHECK(m_pIColumnsInfo->MapColumnIDs(1,rgColumnIDs,&ulOrdinal), S_OK);
else if(m_pIColumnsInfo2)
CHECK(m_pIColumnsInfo2->MapColumnIDs(1,rgColumnIDs,&ulOrdinal), S_OK);
rgColumnIDs=NULL;
// Compare two iOrdinal and ulPropid
if (ulOrdinal == m_rgInfo[ulIndex].iOrdinal)
return TRUE;
else
{
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType <<L" ->COLUMNID]: expected "
<<m_rgInfo[ulIndex].iOrdinal <<L", returned "<<(dbColumnInfo.columnid).uName.ulPropid <<ENDL;
return FALSE;
}
}
}
// This should cover DBKIND_NAME
else if ((dbColumnInfo.columnid).eKind == DBKIND_NAME)
{
// Check the property value being returned
if (!ulIDType)
odtLog << L"Should return DBPROPVAL_PT_NAME for DBPROP_PERSISTENTIDTYPE" <<ENDL;
else
COMPARE(ulIDType, DBPROPVAL_PT_NAME);
// Check to see if the Column names have been changed
if (eSQLStmt == SELECT_CHANGECOLNAME)
wcscat(wszColumnName,L"X");
// Compare two strings, regarding upper and lower case
if (((wszColumnName) && ((dbColumnInfo.columnid).uName.pwszName) &&
(wcscmp(wszColumnName,(dbColumnInfo.columnid).uName.pwszName) == 0)) ||
(!(*wszColumnName) && !((dbColumnInfo.columnid).uName.pwszName)))
return TRUE;
else
{
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType <<L" ->COLUMNID]: expected "
<<(*wszColumnName ? wszColumnName : L"<EMPTY>") <<L", returned "<<(dbColumnInfo.columnid).uName.pwszName <<ENDL;
return FALSE;
}
}
// This should cover DBKIND_PGUID_NAME
else if ((dbColumnInfo.columnid).eKind == DBKIND_PGUID_NAME)
{
// Check the property value being returned
if (!ulIDType)
odtLog << L"Should return DBPROPVAL_PT_PGUID_NAME for DBPROP_PERSISTENTIDTYPE" <<ENDL;
else
COMPARE(ulIDType, DBPROPVAL_PT_PGUID_NAME);
// Check to see if the Column names have been changed
if (eSQLStmt == SELECT_CHANGECOLNAME)
wcscat(wszColumnName,L"X");
// Compare two strings, regarding upper and lower case
if (((wszColumnName) && ((dbColumnInfo.columnid).uName.pwszName) &&
(wcscmp(wszColumnName,(dbColumnInfo.columnid).uName.pwszName) == 0)) ||
(!(*wszColumnName) && !((dbColumnInfo.columnid).uName.pwszName)))
return TRUE;
else
{
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType <<L" ->COLUMNID]: expected "
<<(*wszColumnName ? wszColumnName : L"<EMPTY>") <<L", returned "<<(dbColumnInfo.columnid).uName.pwszName <<ENDL;
return FALSE;
}
}
// This should cover DBKIND_PGUID_PROPID
else if ((dbColumnInfo.columnid).eKind == DBKIND_PGUID_PROPID)
{
// Check the property value being returned
if (!ulIDType)
odtLog << L"Should return DBPROPVAL_PT_PGUID_PROPID for DBPROP_PERSISTENTIDTYPE" <<ENDL;
else
COMPARE(ulIDType, DBPROPVAL_PT_PGUID_PROPID);
// Get the Ordinal back from MapColumnIDs
rgColumnIDs = &dbColumnInfo.columnid;
if(m_pIColumnsInfo)
CHECK(m_pIColumnsInfo->MapColumnIDs(1,rgColumnIDs,&ulOrdinal), S_OK);
else if(m_pIColumnsInfo2)
CHECK(m_pIColumnsInfo2->MapColumnIDs(1,rgColumnIDs,&ulOrdinal), S_OK);
rgColumnIDs=NULL;
// Compare two iOrdinal and ulPropid
if (ulOrdinal == m_rgInfo[ulIndex].iOrdinal)
return TRUE;
else
{
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType <<L" ->COLUMNID]: expected "
<<m_rgInfo[ulIndex].iOrdinal <<L", returned "<<(dbColumnInfo.columnid).uName.ulPropid <<ENDL;
return FALSE;
}
}
// This should cover DBKIND_PROPID
else if ((dbColumnInfo.columnid).eKind == DBKIND_PROPID)
{
// Check the property value being returned
if (!ulIDType)
odtLog << L"Should return DBPROPVAL_PT_PROPID for DBPROP_PERSISTENTIDTYPE" <<ENDL;
else
COMPARE(ulIDType, DBPROPVAL_PT_PROPID);
// Get the Ordinal back from MapColumnIDs
rgColumnIDs = &dbColumnInfo.columnid;
if(m_pIColumnsInfo)
CHECK(m_pIColumnsInfo->MapColumnIDs(1,rgColumnIDs,&ulOrdinal), S_OK);
else if(m_pIColumnsInfo2)
CHECK(m_pIColumnsInfo2->MapColumnIDs(1,rgColumnIDs,&ulOrdinal), S_OK);
rgColumnIDs=NULL;
// Compare two iOrdinal and ulPropid
if (ulOrdinal == m_rgInfo[ulIndex].iOrdinal)
return TRUE;
else
{
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType <<L" ->COLUMNID]: expected "
<<m_rgInfo[ulIndex].iOrdinal <<L", returned "<<(dbColumnInfo.columnid).uName.ulPropid <<ENDL;
return FALSE;
}
}
// This should cover DBKIND_GUID
else if ((dbColumnInfo.columnid).eKind == DBKIND_GUID)
{
// Check the property value being returned
if (!ulIDType)
odtLog << L"Should return DBPROPVAL_PT_GUID for DBPROP_PERSISTENTIDTYPE" <<ENDL;
else
COMPARE(ulIDType, DBPROPVAL_PT_GUID);
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType <<L" ->DBKIND_GUID]: Not tested. " <<ENDL;
}
else
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType <<L" ->COLUMNID]: IS BAD " <<ENDL;
return fSuccess;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.DBCOLUMNFLAGS_CACHEDEFERRED
//
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_DBCOLUMNFLAGS_CACHEDEFERRED(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex)
{
BOOL fSuccess = FALSE;
// Check the DBPROP_CACHEDEFERRED Property
if (GetProperty(DBPROP_CACHEDEFERRED, DBPROPSET_ROWSET, m_pIUnknown))
{
if (dbColumnInfo.dwFlags & DBCOLUMNFLAGS_CACHEDEFERRED)
fSuccess = TRUE;
else
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->CACHEDEFERRED]: expected, but isn't present."<<ENDL;
}
else
{
if (dbColumnInfo.dwFlags & DBCOLUMNFLAGS_CACHEDEFERRED)
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->CACHEDEFERRED]: was not expected, but was present."<<ENDL;
else
fSuccess = TRUE;
}
return fSuccess;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.DBCOLUMNFLAGS_ISBOOKMARK to
// to the iOrdinal of zero.
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_DBCOLUMNFLAGS_ISBOOKMARK(DBCOLUMNINFO dbColumnInfo, DBORDINAL ulIndex)
{
BOOL fSuccess = FALSE;
// Check the Ordinal of the column
if (dbColumnInfo.iOrdinal == 0)
{
// Check for the Bookmark Property and then the FLAG
if ((!GetProperty(DBPROP_IRowsetLocate, DBPROPSET_ROWSET, m_pIUnknown)) &&
(!GetProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIUnknown)) )
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<"Bookmark" <<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->ISBOOKMARK]: expected bookmark property to be set, but isn't set."<< ENDL;
else if (!(dbColumnInfo.dwFlags & DBCOLUMNFLAGS_ISBOOKMARK))
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<"Bookmark" <<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->ISBOOKMARK]: expected bookmark, but isn't present."<< ENDL;
else
fSuccess = TRUE;
}
else
{
if (dbColumnInfo.dwFlags & DBCOLUMNFLAGS_ISBOOKMARK)
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->ISBOOKMARK]: didn't expect the bookmark, but it is present."<< ENDL;
else
fSuccess = TRUE;
}
return fSuccess;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.DBCOLUMNFLAGS_ISFIXEDLENGTH
//
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_DBCOLUMNFLAGS_ISFIXEDLENGTH(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex)
{
BOOL fSuccess = FALSE;
// Check to see if the type is FixedLength
if ((IsFixedLength(col.GetProviderType())) || (col.GetIsFixedLength()))
{
if (dbColumnInfo.dwFlags & DBCOLUMNFLAGS_ISFIXEDLENGTH)
fSuccess = TRUE;
else
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->FIXEDLENGTH]: type is fixedlen but flag not set."<<ENDL;
}
else
{
if (dbColumnInfo.dwFlags & DBCOLUMNFLAGS_ISFIXEDLENGTH)
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->FIXEDLENGTH]: type is not fixedlen but flag was set."<<ENDL;
else
fSuccess = TRUE;
}
return fSuccess;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.DBCOLUMNFLAGS_ISLONG
//
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_DBCOLUMNFLAGS_ISLONG(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex)
{
BOOL fSuccess = FALSE;
// Check to see if the column is Long
if (col.GetIsLong())
{
if (dbColumnInfo.dwFlags & DBCOLUMNFLAGS_ISLONG)
fSuccess = TRUE;
else
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->ISLONG]: type is Long but flag not set."<<ENDL;
}
else
{
if (dbColumnInfo.dwFlags & DBCOLUMNFLAGS_ISLONG)
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->ISLONG]: type is not Long but flag was set."<< ENDL;
else
fSuccess = TRUE;
}
return fSuccess;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.DBCOLUMNFLAGS_ISNULLABLE
//
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_DBCOLUMNFLAGS_ISNULLABLE(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex)
{
BOOL fSuccess = FALSE;
// See if the Column is NULLABLE
if (col.GetNullable())
{
if (dbColumnInfo.dwFlags & DBCOLUMNFLAGS_ISNULLABLE)
fSuccess = TRUE;
else
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->ISNULLABLE]: expected, but isn't present."<<ENDL;
}
else
{
if (dbColumnInfo.dwFlags & DBCOLUMNFLAGS_ISNULLABLE)
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->ISNULLABLE]: is not expected, but is present."<<ENDL;
else
fSuccess = TRUE;
}
return fSuccess;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.DBCOLUMNFLAGS_ISROWID
//
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_DBCOLUMNFLAGS_ISROWID(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex)
{
if (dbColumnInfo.dwFlags & DBCOLUMNFLAGS_ISROWID)
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->ISROWID]: returned for this column."<<ENDL;
return TRUE;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.DBCOLUMNFLAGS_ISROWVER
//
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_DBCOLUMNFLAGS_ISROWVER(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex)
{
if (dbColumnInfo.dwFlags & DBCOLUMNFLAGS_ISROWVER)
{
// Check to see if the column is nullable or updatable
if( (dbColumnInfo.dwFlags & DBCOLUMNFLAGS_ISNULLABLE) || (col.GetNullable()) ||
(dbColumnInfo.dwFlags & DBCOLUMNFLAGS_WRITE) || (col.GetUpdateable()) )
{
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->ISROWVER]: returned for this column and the column is NULLABLE or WRITEABLE."<<ENDL;
return FALSE;
}
}
return TRUE;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.DBCOLUMNFLAGS_MAYBENULL
//
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_DBCOLUMNFLAGS_MAYBENULLABLE(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex,EQUERY eSQLStmt)
{
BOOL fSuccess = FALSE;
// See if the Column is MAYBENULL (JOINS
if (((col.GetNullable()) && (dbColumnInfo.dwFlags & DBCOLUMNFLAGS_MAYBENULL)) ||
(dbColumnInfo.dwFlags & DBCOLUMNFLAGS_MAYBENULL))
fSuccess = TRUE;
else
{
if((eSQLStmt != SELECT_LEFTOUTERJOIN) && (eSQLStmt != SELECT_RIGHTOUTERJOIN))
fSuccess = TRUE;
else
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->MAYBENULL]: expected, but isn't present."<<ENDL;
}
return fSuccess;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.DBCOLUMNFLAGS_MAYDEFER
//
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_DBCOLUMNFLAGS_MAYDEFER(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex)
{
BOOL fSuccess = FALSE;
// Check the DBPROP_DEFERRED Property
if (GetProperty(DBPROP_DEFERRED, DBPROPSET_ROWSET, m_pIUnknown))
{
if ((dbColumnInfo.dwFlags & DBCOLUMNFLAGS_MAYDEFER) ||
(!(col.GetIsLong())) )
fSuccess = TRUE;
else
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->MAYDEFER]: expected, but isn't present."<<ENDL;
}
else
{
if (dbColumnInfo.dwFlags & DBCOLUMNFLAGS_MAYDEFER)
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->MAYDEFER]: was not expected, but was present."<<ENDL;
else
fSuccess = TRUE;
}
return fSuccess;
}
//--------------------------------------------------------------------
// @mfunc Utility function that compares DBCOLUMNINFO.DBCOLUMNFLAGS_WRITE
//
//
// @rdesc TRUE or FALSE
//
BOOL IColInfo::Compare_DBCOLUMNFLAGS_WRITE(CCol col,DBCOLUMNINFO dbColumnInfo,DBORDINAL ulIndex)
{
BOOL fSuccess = FALSE;
// Check to see if the column is readonly
if (col.GetUpdateable())
{
if (((dbColumnInfo.dwFlags & DBCOLUMNFLAGS_WRITE) &&
(!(dbColumnInfo.dwFlags & DBCOLUMNFLAGS_WRITEUNKNOWN))) ||
((dbColumnInfo.dwFlags & DBCOLUMNFLAGS_WRITEUNKNOWN) &&
(!(dbColumnInfo.dwFlags & DBCOLUMNFLAGS_WRITE))))
fSuccess = TRUE;
else
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->WRITE & WRITEUNKNOWN]: not expected, but both are present."<<ENDL;
}
else
{
if ((dbColumnInfo.dwFlags & DBCOLUMNFLAGS_WRITE) ||
(dbColumnInfo.dwFlags & DBCOLUMNFLAGS_WRITEUNKNOWN))
odtLog<<L"[ " <<m_rgInfo[ulIndex].iOrdinal <<L" - "
<<(m_rgInfo[ulIndex].pwszName ? m_rgInfo[ulIndex].pwszName : L"<EMPTY>")
<<L" - " <<m_rgInfo[ulIndex].wType
<<L" ->WRITE or WRITEUNKNOWN]: is not expected, but is present."<<ENDL;
else
fSuccess = TRUE;
}
return fSuccess;
}
//--------------------------------------------------------------------
// @class zombie on CTransaction
//
class Zombie : public CTransaction
{
public:
Zombie(const LPWSTR wszTestCaseName): CTransaction(wszTestCaseName){};
int TestTxnCmd(ETXN eTxn, BOOL fRetaining);
int TestTxnRowset(ETXN eTxn, BOOL fRetaining,BOOL fMultRowsets=FALSE);
int TestTxnRow(ETXN eTxn, BOOL fRetaining);
};
//*-----------------------------------------------------------------------
// @mfunc TestTxn
// Tests commit/abort with respect to IAccessor on commands
//
// @rdesc TEST_PASS or TEST_FAIL
//
int Zombie::TestTxnCmd(ETXN eTxn,BOOL fRetaining)
{
BOOL fSuccess = FALSE;
HRESULT ExpectedHr = E_UNEXPECTED;
HRESULT ExpColInfoHr = DB_E_NOTPREPARED;
DBORDINAL index = 0;
DBCOUNTITEM cRowsObtained = 0;
HROW * rghRows = NULL;
DBORDINAL cColumnIDs = 0;
DBID * rgColumnIDs = NULL;
DBORDINAL * rgColumns = NULL;
DBORDINAL cColumns = 0;
DBCOLUMNINFO * rgInfo = NULL;
WCHAR * pStringsBuffer = NULL;
IColumnsInfo * pIColumnsInfo = NULL;
if (!StartTransaction(SELECT_ALLFROMTBL, (IUnknown **)&pIColumnsInfo,
0, NULL, NULL, ISOLATIONLEVEL_READUNCOMMITTED, TRUE))
goto CLEANUP;
//Make sure everything still works after commit or abort
CHECK(pIColumnsInfo->GetColumnInfo(&cColumns,&rgInfo,&pStringsBuffer),S_OK);
// build array of DBIDs
if(cColumns)
{
cColumnIDs = cColumns;
rgColumnIDs = (DBID *) PROVIDER_ALLOC(sizeof(DBID) * cColumns);
rgColumns = (DBORDINAL *) PROVIDER_ALLOC(sizeof(DBORDINAL) * cColumns);
for(index=0;index<cColumns;index++)
DuplicateDBID(rgInfo[index].columnid, &rgColumnIDs[index]);
}
PROVIDER_FREE(rgInfo);
PROVIDER_FREE(pStringsBuffer);
if (eTxn == ETXN_COMMIT)
{
// Commit the transaction, with retention as specified
if (!GetCommit(fRetaining))
goto CLEANUP;
}
else
{
// Abort the transaction, with retention as specified
if (!GetAbort(fRetaining))
goto CLEANUP;
}
// Make sure everything still works after commit or abort
if ((eTxn == ETXN_COMMIT && m_fCommitPreserve) ||
(eTxn == ETXN_ABORT && m_fAbortPreserve))
ExpectedHr = S_OK;
// Test zombie
CHECK(m_pIRowset->GetNextRows(0,0,1,&cRowsObtained,&rghRows), ExpectedHr);
// Make sure everything still works after commit or abort
if ((eTxn == ETXN_COMMIT && m_fPrepareCommitPreserve) ||
(eTxn == ETXN_ABORT && m_fPrepareAbortPreserve))
ExpColInfoHr = S_OK;
// Transaction object prepares so I have to check for S_OK
// Make sure everything still works after commit or abort
CHECK(pIColumnsInfo->GetColumnInfo(&cColumns,&rgInfo,&pStringsBuffer), ExpColInfoHr);
{
// Transaction object doesn't prepare so I have to check for S_OK
fSuccess = CHECK(pIColumnsInfo->MapColumnIDs(cColumnIDs,rgColumnIDs,rgColumns),ExpColInfoHr);
}
CLEANUP:
// Release the objects and cleanup memory
SAFE_RELEASE(pIColumnsInfo);
PROVIDER_FREE(rgInfo);
PROVIDER_FREE(pStringsBuffer);
// Free the memory allocated for MapColIDs
for(index=0;index<cColumnIDs;index++)
ReleaseDBID(&rgColumnIDs[index],FALSE);
PROVIDER_FREE(rgColumnIDs);
PROVIDER_FREE(rgColumns);
// Release the row handle on the 1st rowset
if (rghRows)
{
CHECK(m_pIRowset->ReleaseRows(cRowsObtained, rghRows, NULL, NULL, NULL),S_OK);
PROVIDER_FREE(rghRows);
}
//Return code of Commit/Abort will vary depending on whether
//or not we have an open txn, so adjust accordingly
if (fRetaining)
ExpectedHr = S_OK;
else
ExpectedHr = XACT_E_NOTRANSACTION;
CleanUpTransaction(ExpectedHr);
if (fSuccess)
return TEST_PASS;
else
return TEST_FAIL;
}
//*-----------------------------------------------------------------------
// @mfunc TestTxn
// Tests commit/abort with respect to IAccessor on commands
//
// @rdesc TEST_PASS or TEST_FAIL
//
int Zombie::TestTxnRowset(ETXN eTxn,BOOL fRetaining,BOOL fMultRowsets)
{
BOOL fSuccess = FALSE;
HRESULT ExpectedHr = E_UNEXPECTED;
DBORDINAL index = 0;
DBCOUNTITEM cRowsObtained = 0;
HROW * rghRows = NULL;
DBORDINAL cColumnIDs = 0;
DBID * rgColumnIDs = NULL;
DBORDINAL * rgColumns = NULL;
DBORDINAL cColumns = 0;
DBCOLUMNINFO * rgInfo = NULL;
WCHAR * pStringsBuffer = NULL;
IColumnsInfo * pIColumnsInfo = NULL;
ULONG cPropSets = 0;
DBPROPSET * rgPropSets = NULL;
IColumnsInfo * pIRowset1 = NULL;
DBORDINAL cColumns1 = 0;
DBCOLUMNINFO * rgColumns1 = NULL;
OLECHAR* pStringsBuffer1 = NULL;
IColumnsInfo * pIRowset2 = NULL;
DBORDINAL cColumns2 = 0;
DBCOLUMNINFO * rgColumns2 = NULL;
OLECHAR* pStringsBuffer2 = NULL;
IColumnsInfo * pIRowset3 = NULL;
DBORDINAL cColumns3 = 0;
DBCOLUMNINFO * rgColumns3 = NULL;
OLECHAR* pStringsBuffer3 = NULL;
if( (SupportedProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIDBCreateSession)) &&
(SettableProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIDBCreateSession)) )
SetProperty(DBPROP_BOOKMARKS,DBPROPSET_ROWSET,
&cPropSets,&rgPropSets,DBTYPE_BOOL,VARIANT_TRUE,DBPROPOPTIONS_REQUIRED);
if (!StartTransaction(SELECT_ALLFROMTBL, (IUnknown **)&pIColumnsInfo,
cPropSets, rgPropSets, NULL, ISOLATIONLEVEL_READUNCOMMITTED, TRUE))
goto CLEANUP;
if (fMultRowsets)
{
if (m_pICommand)
{
CHECK(m_pICommand->Execute(NULL,IID_IColumnsInfo,NULL,NULL,(IUnknown**)&pIRowset1),S_OK);
CHECK(m_pICommand->Execute(NULL,IID_IColumnsInfo,NULL,NULL,(IUnknown**)&pIRowset2),S_OK);
CHECK(m_pICommand->Execute(NULL,IID_IColumnsInfo,NULL,NULL,(IUnknown**)&pIRowset3),S_OK);
}
}
//Make sure everything still works after commit or abort
CHECK(pIColumnsInfo->GetColumnInfo(&cColumns,&rgInfo,&pStringsBuffer),S_OK);
// build array of DBIDs
if(cColumns)
{
cColumnIDs = cColumns;
rgColumnIDs = (DBID *) PROVIDER_ALLOC(sizeof(DBID) * cColumns);
rgColumns = (DBORDINAL *) PROVIDER_ALLOC(sizeof(DBORDINAL) * cColumns);
for(index=0;index<cColumns;index++)
DuplicateDBID(rgInfo[index].columnid, &rgColumnIDs[index]);
}
PROVIDER_FREE(rgInfo);
PROVIDER_FREE(pStringsBuffer);
if (eTxn == ETXN_COMMIT)
{
//Commit the transaction, with retention as specified
if(!GetCommit(fRetaining))
goto CLEANUP;
}
else
{
//Abort the transaction, with retention as specified
if(!GetAbort(fRetaining))
goto CLEANUP;
}
// Make sure everything still works after commit or abort
if ((eTxn == ETXN_COMMIT && m_fCommitPreserve) ||
(eTxn == ETXN_ABORT && m_fAbortPreserve))
ExpectedHr = S_OK;
// Test zombie
CHECK(m_pIRowset->GetNextRows(0,0,1,&cRowsObtained,&rghRows), ExpectedHr);
//Make sure everything still works after commit or abort
if (CHECK(pIColumnsInfo->GetColumnInfo(&cColumns,&rgInfo,&pStringsBuffer),ExpectedHr))
{
fSuccess = CHECK(pIColumnsInfo->MapColumnIDs(cColumnIDs,rgColumnIDs,rgColumns),ExpectedHr);
// make sure rowset1-3 are still alive
if (pIRowset1)
CHECK(pIRowset1->GetColumnInfo(&cColumns1,&rgColumns1,&pStringsBuffer1),ExpectedHr);
if (pIRowset2)
CHECK(pIRowset2->GetColumnInfo(&cColumns2,&rgColumns2,&pStringsBuffer2),ExpectedHr);
if (pIRowset3)
CHECK(pIRowset3->GetColumnInfo(&cColumns3,&rgColumns3,&pStringsBuffer3),ExpectedHr);
}
CLEANUP:
// Release the row handle on the 1st rowset
if (rghRows)
{
CHECK(m_pIRowset->ReleaseRows(cRowsObtained, rghRows, NULL, NULL, NULL),S_OK);
PROVIDER_FREE(rghRows);
}
// Release the objects and cleanup memory
SAFE_RELEASE(pIColumnsInfo);
PROVIDER_FREE(rgInfo);
PROVIDER_FREE(pStringsBuffer);
PROVIDER_FREE(pStringsBuffer1);
PROVIDER_FREE(pStringsBuffer2);
PROVIDER_FREE(pStringsBuffer3);
// Free the memory allocated for MapColIDs
for(index=0;index<cColumnIDs;index++)
ReleaseDBID(&rgColumnIDs[index],FALSE);
PROVIDER_FREE(rgColumnIDs);
PROVIDER_FREE(rgColumns);
PROVIDER_FREE(rgColumns1);
PROVIDER_FREE(rgColumns2);
PROVIDER_FREE(rgColumns3);
PROVIDER_FREE(rghRows);
SAFE_RELEASE(pIRowset1);
SAFE_RELEASE(pIRowset2);
SAFE_RELEASE(pIRowset3);
FreeProperties(&cPropSets, &rgPropSets);
//Return code of Commit/Abort will vary depending on whether
//or not we have an open txn, so adjust accordingly
if (fRetaining)
ExpectedHr = S_OK;
else
ExpectedHr = XACT_E_NOTRANSACTION;
CleanUpTransaction(ExpectedHr);
if (fSuccess)
return TEST_PASS;
else
return TEST_FAIL;
}
//*-----------------------------------------------------------------------
// @mfunc TestTxn
// Tests commit/abort with respect to IAccessor on commands
//
// @rdesc TEST_PASS or TEST_FAIL
//
int Zombie::TestTxnRow(ETXN eTxn,BOOL fRetaining)
{
BOOL fSuccess = FALSE;
HRESULT ExpectedHr = E_UNEXPECTED;
DBORDINAL index = 0;
DBCOUNTITEM cRowsObtained = 0;
HROW * rghRows = NULL;
DBORDINAL cColumnIDs = 0;
DBID * rgColumnIDs = NULL;
DBORDINAL * rgColumns = NULL;
DBORDINAL cColumns = 0;
DBCOLUMNINFO * rgInfo = NULL;
WCHAR * pStringsBuffer = NULL;
IColumnsInfo * pIColumnsInfo = NULL;
ULONG cPropSets = 0;
DBPROPSET * rgPropSets = NULL;
if( (SupportedProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIDBCreateSession)) &&
(SettableProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIDBCreateSession)) )
SetProperty(DBPROP_BOOKMARKS,DBPROPSET_ROWSET,
&cPropSets,&rgPropSets,DBTYPE_BOOL,VARIANT_TRUE,DBPROPOPTIONS_REQUIRED);
if (!StartTransaction(SELECT_ALLFROMTBL, (IUnknown **)&pIColumnsInfo,
cPropSets, rgPropSets, NULL, ISOLATIONLEVEL_READUNCOMMITTED, TRUE))
goto CLEANUP;
//Make sure everything still works after commit or abort
CHECK(pIColumnsInfo->GetColumnInfo(&cColumns,&rgInfo,&pStringsBuffer),S_OK);
// build array of DBIDs
if(cColumns)
{
cColumnIDs = cColumns;
rgColumnIDs = (DBID *) PROVIDER_ALLOC(sizeof(DBID) * cColumns);
rgColumns = (DBORDINAL *) PROVIDER_ALLOC(sizeof(DBORDINAL) * cColumns);
for(index=0;index<cColumns;index++)
DuplicateDBID(rgInfo[index].columnid, &rgColumnIDs[index]);
}
PROVIDER_FREE(rgInfo);
PROVIDER_FREE(pStringsBuffer);
if (eTxn == ETXN_COMMIT)
{
//Commit the transaction, with retention as specified
if(!GetCommit(fRetaining))
goto CLEANUP;
}
else
{
//Abort the transaction, with retention as specified
if(!GetAbort(fRetaining))
goto CLEANUP;
}
// Make sure everything still works after commit or abort
if ((eTxn == ETXN_COMMIT && m_fCommitPreserve) ||
(eTxn == ETXN_ABORT && m_fAbortPreserve))
ExpectedHr = S_OK;
// Test zombie
CHECK(m_pIRowset->GetNextRows(0,0,1,&cRowsObtained,&rghRows), ExpectedHr);
//Make sure everything still works after commit or abort
// Per spec, E_UNEXPECTED will only be returned for Rowsets.
if (CHECK(pIColumnsInfo->GetColumnInfo(&cColumns,&rgInfo,&pStringsBuffer),S_OK))
{
fSuccess = CHECK(pIColumnsInfo->MapColumnIDs(cColumnIDs,rgColumnIDs,rgColumns),S_OK);
}
CLEANUP:
// Release the row handle on the 1st rowset
if (rghRows)
{
CHECK(m_pIRowset->ReleaseRows(cRowsObtained, rghRows, NULL, NULL, NULL),S_OK);
PROVIDER_FREE(rghRows);
}
// Release the objects and cleanup memory
SAFE_RELEASE(pIColumnsInfo);
PROVIDER_FREE(rgInfo);
PROVIDER_FREE(pStringsBuffer);
// Free the memory allocated for MapColIDs
for(index=0;index<cColumnIDs;index++)
ReleaseDBID(&rgColumnIDs[index],FALSE);
PROVIDER_FREE(rgColumnIDs);
PROVIDER_FREE(rgColumns);
PROVIDER_FREE(rghRows);
FreeProperties(&cPropSets, &rgPropSets);
//Return code of Commit/Abort will vary depending on whether
//or not we have an open txn, so adjust accordingly
if (fRetaining)
ExpectedHr = S_OK;
else
ExpectedHr = XACT_E_NOTRANSACTION;
CleanUpTransaction(ExpectedHr);
if (fSuccess)
return TEST_PASS;
else
return TEST_FAIL;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Test Case Section
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// {{ TCW_TEST_CASE_MAP(GetColInfo_Command)
//--------------------------------------------------------------------
// @class IColumnsInfo on a command object
//
class GetColInfo_Command : public IColInfo {
public:
// @cmember Static array of variations
DECLARE_TEST_CASE_DATA();
public:
// {{ TCW_DECLARE_FUNCS
// @cmember Execution Routine
DECLARE_TEST_CASE_FUNCS(GetColInfo_Command,IColInfo);
// }} TCW_DECLARE_FUNCS_END
// @cmember Initialization Routine
virtual BOOL Init();
// @cmember Termination Routine
virtual BOOL Terminate();
// {{ TCW_TESTVARS()
// @cmember E_INVALIDARG: cColumns is NULL
int Variation_1();
// @cmember E_INVALIDARG: rgInfo is NULL
int Variation_2();
// @cmember E_INVALIDARG: pStringsBuffer is NULL
int Variation_3();
// @cmember DB_E_NOCOMMAND: CommandText is not Set
int Variation_4();
// @cmember DB_E_NOCOMMAND: CommandText is Set to Empty
int Variation_5();
// @cmember DB_E_NOCOMMAND: CommandText is Set to NULL
int Variation_6();
// @cmember DB_E_NOTPREPARED/S_OK: CommandText is Set, Prepared, and Unprepared
int Variation_7();
// @cmember DB_E_NOTPREPARED/S_OK: CommandText is Set, but not Prepared
int Variation_8();
// @cmember S_OK: CommandText is Set and Prepared
int Variation_9();
// @cmember S_OK: CommandText includes duplicate columns
int Variation_10();
// @cmember S_OK: CommandText is Set, then change the Text
int Variation_11();
// @cmember S_OK: CommandText contains a count(*)
int Variation_12();
// @cmember S_OK: CommandText contains different column names
int Variation_13();
// @cmember S_OK: CommandText contains a insert statement
int Variation_14();
// @cmember S_OK: CommandText contains a select from an Empty Rowset
int Variation_15();
// @cmember S_OK: Base table contains no rows
int Variation_16();
// @cmember S_OK: CommandText contains a update statement
int Variation_17();
// @cmember S_OK: CommandText contains a delete statement
int Variation_18();
// @cmember S_OK: Ask for DBPROP_IRowsetLocate on a Select Statement
int Variation_19();
// @cmember S_OK: Ask for DBPROP_BOOKMARKS on a Select Statement
int Variation_20();
// @cmember S_OK: Ask for DBPROP_BOOKMARKS on a Insert Statement
int Variation_21();
// @cmember S_OK: Ask for DBPROP_DEFERRED on a Select Statement
int Variation_22();
// @cmember S_OK: Ask for DBPROP_CACHEDEFERRED on a Select Statement
int Variation_23();
// @cmember S_OK: Ask for DBPROP_MAYWRITECOLUMN on a Select Statement
int Variation_24();
// @cmember S_OK: CommandText contains a select from view
int Variation_25();
// @cmember S_OK: Ask for DBPROP_BOOKMARKS on a Select Statement with Column List
int Variation_26();
// @cmember S_OK: CommandText contains a LEFT OUTER JOIN
int Variation_27();
// @cmember S_OK: CommandText contains a RIGHT OUTER JOIN
int Variation_28();
// @cmember DB_E_NOTABLE: Call with a Table that doesn't exist
int Variation_29();
// }} TCW_TESTVARS_END
};
// {{ TCW_TESTCASE(GetColInfo_Command)
#define THE_CLASS GetColInfo_Command
BEG_TEST_CASE(GetColInfo_Command, IColInfo, L"IColumnsInfo on a command object")
TEST_VARIATION(1, L"E_INVALIDARG: cColumns is NULL")
TEST_VARIATION(2, L"E_INVALIDARG: rgInfo is NULL")
TEST_VARIATION(3, L"E_INVALIDARG: pStringsBuffer is NULL")
TEST_VARIATION(4, L"DB_E_NOCOMMAND: CommandText is not Set")
TEST_VARIATION(5, L"DB_E_NOCOMMAND: CommandText is Set to Empty")
TEST_VARIATION(6, L"DB_E_NOCOMMAND: CommandText is Set to NULL")
TEST_VARIATION(7, L"DB_E_NOTPREPARED/S_OK: CommandText is Set, Prepared, and Unprepared")
TEST_VARIATION(8, L"DB_E_NOTPREPARED/S_OK: CommandText is Set, but not Prepared")
TEST_VARIATION(9, L"S_OK: CommandText is Set and Prepared")
TEST_VARIATION(10, L"S_OK: CommandText includes duplicate columns")
TEST_VARIATION(11, L"S_OK: CommandText is Set, then change the Text")
TEST_VARIATION(12, L"S_OK: CommandText contains a count(*)")
TEST_VARIATION(13, L"S_OK: CommandText contains different column names")
TEST_VARIATION(14, L"S_OK: CommandText contains a insert statement")
TEST_VARIATION(15, L"S_OK: CommandText contains a select from an Empty Rowset")
TEST_VARIATION(16, L"S_OK: Base table contains no rows")
TEST_VARIATION(17, L"S_OK: CommandText contains a update statement")
TEST_VARIATION(18, L"S_OK: CommandText contains a delete statement")
TEST_VARIATION(19, L"S_OK: Ask for DBPROP_IRowsetLocate on a Select Statement")
TEST_VARIATION(20, L"S_OK: Ask for DBPROP_BOOKMARKS on a Select Statement")
TEST_VARIATION(21, L"S_OK: Ask for DBPROP_BOOKMARKS on a Insert Statement")
TEST_VARIATION(22, L"S_OK: Ask for DBPROP_DEFERRED on a Select Statement")
TEST_VARIATION(23, L"S_OK: Ask for DBPROP_CACHEDEFERRED on a Select Statement")
TEST_VARIATION(24, L"S_OK: Ask for DBPROP_MAYWRITECOLUMN on a Select Statement")
TEST_VARIATION(25, L"S_OK: CommandText contains a select from view")
TEST_VARIATION(26, L"S_OK: Ask for DBPROP_BOOKMARKS on a Select Statement with Column List")
TEST_VARIATION(27, L"S_OK: CommandText contains a LEFT OUTER JOIN")
TEST_VARIATION(28, L"S_OK: CommandText contains a RIGHT OUTER JOIN")
TEST_VARIATION(29, L"DB_E_NOTABLE: Call with a Table that doesn't exist")
END_TEST_CASE()
#undef THE_CLASS
// }} TCW_TESTCASE_END
// }} TCW_TEST_CASE_MAP_END
// {{ TCW_TEST_CASE_MAP(GetColInfo_ExecuteRowset)
//--------------------------------------------------------------------
// @class IColumnsInfo on a rowset object
//
class GetColInfo_ExecuteRowset : public IColInfo {
private:
// @cmember Static array of variations
DECLARE_TEST_CASE_DATA();
public:
// {{ TCW_DECLARE_FUNCS
// @cmember Execution Routine
DECLARE_TEST_CASE_FUNCS(GetColInfo_ExecuteRowset,IColInfo);
// }} TCW_DECLARE_FUNCS_END
// @cmember Initialization Routine
virtual BOOL Init();
// @cmember Termination Routine
virtual BOOL Terminate();
// {{ TCW_TESTVARS()
// @cmember E_INVALIDARG: cColumns is NULL
int Variation_1();
// @cmember E_INVALIDARG: rgInfo is NULL
int Variation_2();
// @cmember E_INVALIDARG: pStringsBuffer is NULL
int Variation_3();
// @cmember S_OK: CommandText is Set and Executed
int Variation_4();
// @cmember S_OK: CommandText is Set, Prepared, Unprepared, and Executed
int Variation_5();
// @cmember S_OK: CommandText is Set, Prepared, and Executed
int Variation_6();
// @cmember S_OK: CommandText that includes duplicate columns
int Variation_7();
// @cmember S_OK: CommandText is Set, then change the Text
int Variation_8();
// @cmember S_OK: CommandText contains a count(*)
int Variation_9();
// @cmember S_OK: CommandText contains different column names
int Variation_10();
// @cmember S_OK: CommandText contains a select from an Empty Rowset
int Variation_11();
// @cmember S_OK: Base table contains no rows
int Variation_12();
// @cmember S_OK: Ask for DBPROP_IRowsetLocate on a Select Statement
int Variation_13();
// @cmember S_OK: Ask for DBPROP_BOOKMARKS on a Select Statement
int Variation_14();
// @cmember S_OK: Ask for DBPROP_DEFERRED on a Select Statement
int Variation_15();
// @cmember S_OK: Ask for DBPROP_CACHEDEFERRED on a Select Statement
int Variation_16();
// @cmember S_OK: Ask for DBPROP_MAYWRITECOLUMN on a Select Statement
int Variation_17();
// @cmember S_OK: CommandText contains a select from view
int Variation_18();
// @cmember S_OK: CommandText contains a LEFT OUTER JOIN
int Variation_19();
// @cmember S_OK: CommandText contains a RIGHT OUTER JOIN
int Variation_20();
// }} TCW_TESTVARS_END
};
// {{ TCW_TESTCASE(GetColInfo_ExecuteRowset)
#define THE_CLASS GetColInfo_ExecuteRowset
BEG_TEST_CASE(GetColInfo_ExecuteRowset, IColInfo, L"IColumnsInfo on a rowset object")
TEST_VARIATION(1, L"E_INVALIDARG: cColumns is NULL")
TEST_VARIATION(2, L"E_INVALIDARG: rgInfo is NULL")
TEST_VARIATION(3, L"E_INVALIDARG: pStringsBuffer is NULL")
TEST_VARIATION(4, L"S_OK: CommandText is Set and Executed")
TEST_VARIATION(5, L"S_OK: CommandText is Set, Prepared, Unprepared, and Executed")
TEST_VARIATION(6, L"S_OK: CommandText is Set, Prepared, and Executed")
TEST_VARIATION(7, L"S_OK: CommandText that includes duplicate columns")
TEST_VARIATION(8, L"S_OK: CommandText is Set, then change the Text")
TEST_VARIATION(9, L"S_OK: CommandText contains a count(*)")
TEST_VARIATION(10, L"S_OK: CommandText contains different column names")
TEST_VARIATION(11, L"S_OK: CommandText contains a select from an Empty Rowset")
TEST_VARIATION(12, L"S_OK: Base table contains no rows")
TEST_VARIATION(13, L"S_OK: Ask for DBPROP_IRowsetLocate on a Select Statement")
TEST_VARIATION(14, L"S_OK: Ask for DBPROP_BOOKMARKS on a Select Statement")
TEST_VARIATION(15, L"S_OK: Ask for DBPROP_DEFERRED on a Select Statement")
TEST_VARIATION(16, L"S_OK: Ask for DBPROP_CACHEDEFERRED on a Select Statement")
TEST_VARIATION(17, L"S_OK: Ask for DBPROP_MAYWRITECOLUMN on a Select Statement")
TEST_VARIATION(18, L"S_OK: CommandText contains a select from view")
TEST_VARIATION(19, L"S_OK: CommandText contains a LEFT OUTER JOIN")
TEST_VARIATION(20, L"S_OK: CommandText contains a RIGHT OUTER JOIN")
END_TEST_CASE()
#undef THE_CLASS
// }} TCW_TESTCASE_END
// }} TCW_TEST_CASE_MAP_END
// {{ TCW_TEST_CASE_MAP(GetColInfo_OpenRowset)
//--------------------------------------------------------------------
// @class IColumnsInfo on a rowset object
//
class GetColInfo_OpenRowset : public IColInfo {
private:
// @cmember Static array of variations
DECLARE_TEST_CASE_DATA();
public:
// {{ TCW_DECLARE_FUNCS
// @cmember Execution Routine
DECLARE_TEST_CASE_FUNCS(GetColInfo_OpenRowset,IColInfo);
// }} TCW_DECLARE_FUNCS_END
// @cmember Initialization Routine
virtual BOOL Init();
// @cmember Termination Routine
virtual BOOL Terminate();
// {{ TCW_TESTVARS()
// @cmember E_INVALIDARG: cColumns is NULL
int Variation_1();
// @cmember E_INVALIDARG: rgInfo is NULL
int Variation_2();
// @cmember E_INVALIDARG: pStringsBuffer is NULL
int Variation_3();
// @cmember S_OK: Basic OpenRowset
int Variation_4();
// @cmember S_OK: Base table contains no rows
int Variation_5();
// @cmember S_OK: Ask for DBPROP_IRowsetLocate on a Select Statement
int Variation_6();
// @cmember S_OK: Ask for DBPROP_BOOKMARKS on a Select Statement
int Variation_7();
// @cmember S_OK: Ask for DBPROP_DEFERRED on a Select Statement
int Variation_8();
// @cmember S_OK: Ask for DBPROP_CACHEDEFERRED on a Select Statement
int Variation_9();
// @cmember S_OK: Ask for DBPROP_MAYWRITECOLUMN on a Select Statement
int Variation_10();
// }} TCW_TESTVARS_END
};
// {{ TCW_TESTCASE(GetColInfo_OpenRowset)
#define THE_CLASS GetColInfo_OpenRowset
BEG_TEST_CASE(GetColInfo_OpenRowset, IColInfo, L"IColumnsInfo on a rowset object")
TEST_VARIATION(1, L"E_INVALIDARG: cColumns is NULL")
TEST_VARIATION(2, L"E_INVALIDARG: rgInfo is NULL")
TEST_VARIATION(3, L"E_INVALIDARG: pStringsBuffer is NULL")
TEST_VARIATION(4, L"S_OK: Basic OpenRowset")
TEST_VARIATION(5, L"S_OK: Base table contains no rows")
TEST_VARIATION(6, L"S_OK: Ask for DBPROP_IRowsetLocate on a Select Statement")
TEST_VARIATION(7, L"S_OK: Ask for DBPROP_BOOKMARKS on a Select Statement")
TEST_VARIATION(8, L"S_OK: Ask for DBPROP_DEFERRED on a Select Statement")
TEST_VARIATION(9, L"S_OK: Ask for DBPROP_CACHEDEFERRED on a Select Statement")
TEST_VARIATION(10, L"S_OK: Ask for DBPROP_MAYWRITECOLUMN on a Select Statement")
END_TEST_CASE()
#undef THE_CLASS
// }} TCW_TESTCASE_END
// }} TCW_TEST_CASE_MAP_END
// {{ TCW_TEST_CASE_MAP(GetColInfoRow_Rowset)
//*-----------------------------------------------------------------------
// @class GetColumnInfo on a Row object
//
class GetColInfoRow_Rowset : public IColInfo {
public:
// @cmember Static array of variations
DECLARE_TEST_CASE_DATA();
public:
// {{ TCW_DECLARE_FUNCS
// @cmember Execution Routine
DECLARE_TEST_CASE_FUNCS(GetColInfoRow_Rowset,IColInfo);
// }} TCW_DECLARE_FUNCS_END
// @cmember Initialization Routine
virtual BOOL Init();
// @cmember Termination Routine
virtual BOOL Terminate();
// {{ TCW_TESTVARS()
// @cmember S_OK: Basic
int Variation_1();
// @cmember E_INVALIDARG: pcColumns is NULL
int Variation_2();
// @cmember E_INVALIDARG: prgInfo is NULL
int Variation_3();
// @cmember E_INVALIDARG: ppStringsBuffer is NULL
int Variation_4();
// }} TCW_TESTVARS_END
} ;
// {{ TCW_TESTCASE(GetColInfoRow_Rowset)
#define THE_CLASS GetColInfoRow_Rowset
BEG_TEST_CASE(GetColInfoRow_Rowset, IColInfo, L"GetColumnInfo on a Row object")
TEST_VARIATION(1, L"S_OK: Basic")
TEST_VARIATION(2, L"E_INVALIDARG: pcColumns is NULL")
TEST_VARIATION(3, L"E_INVALIDARG: prgInfo is NULL")
TEST_VARIATION(4, L"E_INVALIDARG: ppStringsBuffer is NULL")
END_TEST_CASE()
#undef THE_CLASS
// }} TCW_TESTCASE_END
// }} TCW_TEST_CASE_MAP_END
// {{ TCW_TEST_CASE_MAP(GetResColInfoRow_Rowset)
//*-----------------------------------------------------------------------
// @class GetRestrictedColumnInfo on a Row object
//
class GetResColInfoRow_Rowset : public IColInfo {
public:
// @cmember Static array of variations
DECLARE_TEST_CASE_DATA();
public:
// {{ TCW_DECLARE_FUNCS
// @cmember Execution Routine
DECLARE_TEST_CASE_FUNCS(GetResColInfoRow_Rowset,IColInfo);
// }} TCW_DECLARE_FUNCS_END
// @cmember Initialization Routine
virtual BOOL Init();
// @cmember Termination Routine
virtual BOOL Terminate();
// {{ TCW_TESTVARS()
// @cmember S_OK: No Masks
int Variation_1();
// @cmember S_OK: 1 name mask
int Variation_2();
// @cmember S_OK: Multiple name masks
int Variation_3();
// @cmember S_OK: Existing Column as mask
int Variation_4();
// @cmember S_OK: GUID_PROPID mask
int Variation_5();
// @cmember S_OK: Guid_Name mask
int Variation_6();
// @cmember S_OK: Pguid_Name mask
int Variation_7();
// @cmember S_OK: PGuid_Propid mask
int Variation_8();
// @cmember S_OK: Propid mask
int Variation_9();
// @cmember S_OK: Guid mask
int Variation_10();
// @cmember S_OK: prgColumnIDs=NULL but prgColumnInfo != NULL
int Variation_11();
// @cmember S_OK: prgColumnInfo=NULL but prgColumnIDs != NULL
int Variation_12();
// @cmember DB_E_BADCOLUMNID: invalid DBID for rgColumnIDMasks
int Variation_13();
// @cmember DB_E_NOCOLUMN: Non-existent name for mask
int Variation_14();
// @cmember E_INVALIDARG: cColumnIDMasks=1 and rgColumnIDMasks=NULL
int Variation_15();
// @cmember E_INVALIDARG: pcColumns=NULL
int Variation_16();
// @cmember E_INVALIDARG: ppStringsBuffer=NULL
int Variation_17();
// @cmember E_INVALIDARG: prgColumnIDs=NULL and prgColumnInfo=NULL
int Variation_18();
// @cmember E_INVALIDARG: ppStringsBuffer=NULL & either prgColumnIDs or prgColumnInfo = NULL
int Variation_19();
// }} TCW_TESTVARS_END
} ;
// {{ TCW_TESTCASE(GetResColInfoRow_Rowset)
#define THE_CLASS GetResColInfoRow_Rowset
BEG_TEST_CASE(GetResColInfoRow_Rowset, IColInfo, L"GetRestrictedColumnInfo on a Row object")
TEST_VARIATION(1, L"S_OK: No Masks")
TEST_VARIATION(2, L"S_OK: 1 name mask")
TEST_VARIATION(3, L"S_OK: Multiple name masks")
TEST_VARIATION(4, L"S_OK: Existing Column as mask")
TEST_VARIATION(5, L"S_OK: GUID_PROPID mask")
TEST_VARIATION(6, L"S_OK: Guid_Name mask")
TEST_VARIATION(7, L"S_OK: Pguid_Name mask")
TEST_VARIATION(8, L"S_OK: PGuid_Propid mask")
TEST_VARIATION(9, L"S_OK: Propid mask")
TEST_VARIATION(10, L"S_OK: Guid mask")
TEST_VARIATION(11, L"S_OK: prgColumnIDs=NULL but prgColumnInfo != NULL")
TEST_VARIATION(12, L"S_OK: prgColumnInfo=NULL but prgColumnIDs != NULL")
TEST_VARIATION(13, L"DB_E_BADCOLUMNID: invalid DBID for rgColumnIDMasks")
TEST_VARIATION(14, L"DB_E_NOCOLUMN: Non-existent name for mask")
TEST_VARIATION(15, L"E_INVALIDARG: cColumnIDMasks=1 and rgColumnIDMasks=NULL")
TEST_VARIATION(16, L"E_INVALIDARG: pcColumns=NULL")
TEST_VARIATION(17, L"E_INVALIDARG: ppStringsBuffer=NULL")
TEST_VARIATION(18, L"E_INVALIDARG: prgColumnIDs=NULL and prgColumnInfo=NULL")
TEST_VARIATION(19, L"E_INVALIDARG: ppStringsBuffer=NULL & either prgColumnIDs or prgColumnInfo = NULL")
END_TEST_CASE()
#undef THE_CLASS
// }} TCW_TESTCASE_END
// }} TCW_TEST_CASE_MAP_END
// {{ TCW_TEST_CASE_MAP(MapColID_Command)
//--------------------------------------------------------------------
// @class MapColumnIDs on a command object
//
class MapColID_Command : public IColInfo {
public:
// @cmember Static array of variations
DECLARE_TEST_CASE_DATA();
public:
// {{ TCW_DECLARE_FUNCS
// @cmember Execution Routine
DECLARE_TEST_CASE_FUNCS(MapColID_Command,IColInfo);
// }} TCW_DECLARE_FUNCS_END
// @cmember Initialization Routine
virtual BOOL Init();
// @cmember Termination Routine
virtual BOOL Terminate();
// {{ TCW_TESTVARS()
// @cmember E_INVALIDARG: cColumnIDs != 0, range = NULL
int Variation_1();
// @cmember E_INVALIDARG: rgColumns is NULL
int Variation_2();
// @cmember DB_E_NOCOMMAND: CommandText is not Set
int Variation_3();
// @cmember DB_E_NOCOMMAND: CommandText is Set to Empty
int Variation_4();
// @cmember DB_E_NOCOMMAND: CommandText is Set to NULL
int Variation_5();
// @cmember DB_E_NOTPREPARED/S_OK: CommandText is Set, but not Prepared
int Variation_6();
// @cmember DB_E_NOTPREPARED/S_OK: CommandText is Set, Prepared, and Unprepared
int Variation_7();
// @cmember DB_E_ERRORSOCCURRED: All ColumnIDs are invalid
int Variation_8();
// @cmember DB_S_ERRORSOCCURRED: One ColumnID is invalid
int Variation_9();
// @cmember S_OK: Count of ColumnIDs is 0
int Variation_10();
// @cmember S_OK: Valid count and valid range of ColumnIDs
int Variation_11();
// @cmember S_OK: Ask for DBPROP_BOOKMARKS
int Variation_12();
// @cmember S_OK: Duplicate ColumnIDs
int Variation_13();
// @cmember S_OK: ColumnIDs in reverse order
int Variation_14();
// @cmember S_OK: ColumnIDs from a view
int Variation_15();
// @cmember S_OK: ColumnIDs from a count(*)
int Variation_16();
// @cmember DB_E_ERRORSOCCURRED: Change the DBKIND in the ColumnIDs
int Variation_17();
// @cmember DB_E_ERRORSOCCURRED: Ask for Column 0 with DBKIND_PROPID
int Variation_18();
// @cmember DB_E_ERRORSOCCURRED: Switch the DBKIND in the ColumnIDs
int Variation_19();
// @cmember DB_E_ERRORSOCCURRED: Change the GUID in the DBID
int Variation_20();
// @cmember DB_S_ERRORSOCCURRED: ColumnID one greater than the last ordinal
int Variation_21();
// @cmember DB_E_ERRORSOCCURRED: Ask for Column 0
int Variation_22();
// @cmember DB_E_NOTABLE: Call with a Table that doesn't exist
int Variation_23();
// }} TCW_TESTVARS_END
};
// {{ TCW_TESTCASE(MapColID_Command)
#define THE_CLASS MapColID_Command
BEG_TEST_CASE(MapColID_Command, IColInfo, L"MapColumnIDs on a command object")
TEST_VARIATION(1, L"E_INVALIDARG: cColumnIDs != 0, range = NULL")
TEST_VARIATION(2, L"E_INVALIDARG: rgColumns is NULL")
TEST_VARIATION(3, L"DB_E_NOCOMMAND: CommandText is not Set")
TEST_VARIATION(4, L"DB_E_NOCOMMAND: CommandText is Set to Empty")
TEST_VARIATION(5, L"DB_E_NOCOMMAND: CommandText is Set to NULL")
TEST_VARIATION(6, L"DB_E_NOTPREPARED/S_OK: CommandText is Set, but not Prepared")
TEST_VARIATION(7, L"DB_E_NOTPREPARED/S_OK: CommandText is Set, Prepared, and Unprepared")
TEST_VARIATION(8, L"DB_E_ERRORSOCCURRED: All ColumnIDs are invalid")
TEST_VARIATION(9, L"DB_S_ERRORSOCCURRED: One ColumnID is invalid")
TEST_VARIATION(10, L"S_OK: Count of ColumnIDs is 0")
TEST_VARIATION(11, L"S_OK: Valid count and valid range of ColumnIDs")
TEST_VARIATION(12, L"S_OK: Ask for DBPROP_BOOKMARKS")
TEST_VARIATION(13, L"S_OK: Duplicate ColumnIDs")
TEST_VARIATION(14, L"S_OK: ColumnIDs in reverse order")
TEST_VARIATION(15, L"S_OK: ColumnIDs from a view")
TEST_VARIATION(16, L"S_OK: ColumnIDs from a count(*)")
TEST_VARIATION(17, L"DB_E_ERRORSOCCURRED: Change the DBKIND in the ColumnIDs")
TEST_VARIATION(18, L"DB_E_ERRORSOCCURRED: Ask for Column 0 with DBKIND_PROPID")
TEST_VARIATION(19, L"DB_E_ERRORSOCCURRED: Switch the DBKIND in the ColumnIDs")
TEST_VARIATION(20, L"DB_E_ERRORSOCCURRED: Change the GUID in the DBID")
TEST_VARIATION(21, L"DB_S_ERRORSOCCURRED: ColumnID one greater than the last ordinal")
TEST_VARIATION(22, L"DB_E_ERRORSOCCURRED: Ask for Column 0")
TEST_VARIATION(23, L"DB_E_NOTABLE: Call with a Table that doesn't exist")
END_TEST_CASE()
#undef THE_CLASS
// }} TCW_TESTCASE_END
// }} TCW_TEST_CASE_MAP_END
// {{ TCW_TEST_CASE_MAP(MapColID_ExecuteRowset)
//--------------------------------------------------------------------
// @class MapColumnIDs on a rowset
//
class MapColID_ExecuteRowset : public IColInfo {
private:
// @cmember Static array of variations
DECLARE_TEST_CASE_DATA();
public:
// {{ TCW_DECLARE_FUNCS
// @cmember Execution Routine
DECLARE_TEST_CASE_FUNCS(MapColID_ExecuteRowset,IColInfo);
// }} TCW_DECLARE_FUNCS_END
// @cmember Initialization Routine
virtual BOOL Init();
// @cmember Termination Routine
virtual BOOL Terminate();
// {{ TCW_TESTVARS()
// @cmember E_INVALIDARG: cColumnIDs != 0, range = NULL
int Variation_1();
// @cmember E_INVALIDARG: rgColumns is NULL
int Variation_2();
// @cmember DB_E_ERRORSOCCURRED: All ColumnIDs are invalid
int Variation_3();
// @cmember DB_S_ERRORSOCCURRED: One ColumnID is invalid
int Variation_4();
// @cmember S_OK: Count of ColumnIDs is 0
int Variation_5();
// @cmember S_OK: Valid count and valid range of ColumnIDs
int Variation_6();
// @cmember S_OK: Ask for DBPROP_BOOKMARKS
int Variation_7();
// @cmember S_OK: Duplicate ColumnIDs
int Variation_8();
// @cmember S_OK: ColumnIDs in reverse order
int Variation_9();
// @cmember S_OK: ColumnIDs from a view
int Variation_10();
// @cmember S_OK: MapColumnIDs on optional columns in IColumnsRowset
int Variation_11();
// @cmember S_OK: ColumnIDs from a count(*)
int Variation_12();
// @cmember DB_E_ERRORSOCCURRED: Change the DBKIND in the ColumnIDs
int Variation_13();
// @cmember DB_E_ERRORSOCCURRED: Ask for Column 0 with DBKIND_PROPID
int Variation_14();
// @cmember DB_E_ERRORSOCCURRED: Switch the DBKIND in the ColumnIDs
int Variation_15();
// @cmember DB_E_ERRORSOCCURRED: Change the GUID in the DBID
int Variation_16();
// @cmember DB_S_ERRORSOCCURRED: ColumnID one greater than the last ordinal
int Variation_17();
// @cmember DB_E_ERRORSOCCURRED: Ask for Column 0
int Variation_18();
// }} TCW_TESTVARS_END
};
// {{ TCW_TESTCASE(MapColID_ExecuteRowset)
#define THE_CLASS MapColID_ExecuteRowset
BEG_TEST_CASE(MapColID_ExecuteRowset, IColInfo, L"MapColumnIDs on a rowset")
TEST_VARIATION(1, L"E_INVALIDARG: cColumnIDs != 0, range = NULL")
TEST_VARIATION(2, L"E_INVALIDARG: rgColumns is NULL")
TEST_VARIATION(3, L"DB_E_ERRORSOCCURRED: All ColumnIDs are invalid")
TEST_VARIATION(4, L"DB_S_ERRORSOCCURRED: One ColumnID is invalid")
TEST_VARIATION(5, L"S_OK: Count of ColumnIDs is 0")
TEST_VARIATION(6, L"S_OK: Valid count and valid range of ColumnIDs")
TEST_VARIATION(7, L"S_OK: Ask for DBPROP_BOOKMARKS")
TEST_VARIATION(8, L"S_OK: Duplicate ColumnIDs")
TEST_VARIATION(9, L"S_OK: ColumnIDs in reverse order")
TEST_VARIATION(10, L"S_OK: ColumnIDs from a view")
TEST_VARIATION(11, L"S_OK: MapColumnIDs on optional columns in IColumnsRowset")
TEST_VARIATION(12, L"S_OK: ColumnIDs from a count(*)")
TEST_VARIATION(13, L"DB_E_ERRORSOCCURRED: Change the DBKIND in the ColumnIDs")
TEST_VARIATION(14, L"DB_E_ERRORSOCCURRED: Ask for Column 0 with DBKIND_PROPID")
TEST_VARIATION(15, L"DB_E_ERRORSOCCURRED: Switch the DBKIND in the ColumnIDs")
TEST_VARIATION(16, L"DB_E_ERRORSOCCURRED: Change the GUID in the DBID")
TEST_VARIATION(17, L"DB_S_ERRORSOCCURRED: ColumnID one greater than the last ordinal")
TEST_VARIATION(18, L"DB_E_ERRORSOCCURRED: Ask for Column 0")
END_TEST_CASE()
#undef THE_CLASS
// }} TCW_TESTCASE_END
// }} TCW_TEST_CASE_MAP_END
// {{ TCW_TEST_CASE_MAP(MapColID_OpenRowset)
//--------------------------------------------------------------------
// @class MapColumnIDs on a rowset
//
class MapColID_OpenRowset : public IColInfo {
private:
// @cmember Static array of variations
DECLARE_TEST_CASE_DATA();
public:
// {{ TCW_DECLARE_FUNCS
// @cmember Execution Routine
DECLARE_TEST_CASE_FUNCS(MapColID_OpenRowset,IColInfo);
// }} TCW_DECLARE_FUNCS_END
// @cmember Initialization Routine
virtual BOOL Init();
// @cmember Termination Routine
virtual BOOL Terminate();
// {{ TCW_TESTVARS()
// @cmember E_INVALIDARG: cColumnIDs != 0, range = NULL
int Variation_1();
// @cmember E_INVALIDARG: rgColumns is NULL
int Variation_2();
// @cmember DB_E_ERRORSOCCURRED: All ColumnIDs are invalid
int Variation_3();
// @cmember DB_S_ERRORSOCCURRED: One ColumnID is invalid
int Variation_4();
// @cmember S_OK: Count of ColumnIDs is 0
int Variation_5();
// @cmember S_OK: Valid count and valid range of ColumnIDs
int Variation_6();
// @cmember S_OK: Ask for DBPROP_BOOKMARKS
int Variation_7();
// @cmember S_OK: MapColumnIDs on optional columns in IColumnsRowset
int Variation_8();
// @cmember DB_E_ERRORSOCCURRED: Change the DBKIND in the ColumnIDs
int Variation_9();
// @cmember DB_E_ERRORSOCCURRED: Ask for Column 0 with DBKIND_PROPID
int Variation_10();
// @cmember DB_E_ERRORSOCCURRED: Switch the DBKIND in the ColumnIDs
int Variation_11();
// @cmember DB_E_ERRORSOCCURRED: Change the GUID in the DBID
int Variation_12();
// @cmember DB_E_ERRORSOCCURRED: Switch the DBKIND in the ColumnIDs with Bookmarks
int Variation_13();
// @cmember DB_S_ERRORSOCCURRED: ColumnID one greater than the last ordinal
int Variation_14();
// @cmember DB_E_ERRORSOCCURRED: Ask for Column 0
int Variation_15();
// }} TCW_TESTVARS_END
};
// {{ TCW_TESTCASE(MapColID_OpenRowset)
#define THE_CLASS MapColID_OpenRowset
BEG_TEST_CASE(MapColID_OpenRowset, IColInfo, L"MapColumnIDs on a rowset")
TEST_VARIATION(1, L"E_INVALIDARG: cColumnIDs != 0, range = NULL")
TEST_VARIATION(2, L"E_INVALIDARG: rgColumns is NULL")
TEST_VARIATION(3, L"DB_E_ERRORSOCCURRED: All ColumnIDs are invalid")
TEST_VARIATION(4, L"DB_S_ERRORSOCCURRED: One ColumnID is invalid")
TEST_VARIATION(5, L"S_OK: Count of ColumnIDs is 0")
TEST_VARIATION(6, L"S_OK: Valid count and valid range of ColumnIDs")
TEST_VARIATION(7, L"S_OK: Ask for DBPROP_BOOKMARKS")
TEST_VARIATION(8, L"S_OK: MapColumnIDs on optional columns in IColumnsRowset")
TEST_VARIATION(9, L"DB_E_ERRORSOCCURRED: Change the DBKIND in the ColumnIDs")
TEST_VARIATION(10, L"DB_E_ERRORSOCCURRED: Ask for Column 0 with DBKIND_PROPID")
TEST_VARIATION(11, L"DB_E_ERRORSOCCURRED: Switch the DBKIND in the ColumnIDs")
TEST_VARIATION(12, L"DB_E_ERRORSOCCURRED: Change the GUID in the DBID")
TEST_VARIATION(13, L"DB_E_ERRORSOCCURRED: Switch the DBKIND in the ColumnIDs with Bookmarks")
TEST_VARIATION(14, L"DB_S_ERRORSOCCURRED: ColumnID one greater than the last ordinal")
TEST_VARIATION(15, L"DB_E_ERRORSOCCURRED: Ask for Column 0")
END_TEST_CASE()
#undef THE_CLASS
// }} TCW_TESTCASE_END
// }} TCW_TEST_CASE_MAP_END
// {{ TCW_TEST_CASE_MAP(MapColIDRow_Rowset)
//*-----------------------------------------------------------------------
// @class MapColumnIDs on a Row object
//
class MapColIDRow_Rowset : public IColInfo {
public:
// @cmember Static array of variations
DECLARE_TEST_CASE_DATA();
public:
// {{ TCW_DECLARE_FUNCS
// @cmember Execution Routine
DECLARE_TEST_CASE_FUNCS(MapColIDRow_Rowset,IColInfo);
// }} TCW_DECLARE_FUNCS_END
// @cmember Initialization Routine
virtual BOOL Init();
// @cmember Termination Routine
virtual BOOL Terminate();
// {{ TCW_TESTVARS()
// @cmember S_OK: cColumnIDs = 0
int Variation_1();
// @cmember S_OK: All columns returned by GetColInfo
int Variation_2();
// @cmember S_OK: Subset of columns returned by GetColInfo
int Variation_3();
// @cmember S_OK: Columns out of order
int Variation_4();
// @cmember DB_S_ERRORSOCCURRED: One ColumnID is invalid
int Variation_5();
// @cmember DB_E_ERRORSOCCURRED: All ColumnIDs are invalid
int Variation_6();
// @cmember E_INVALIDARG: cColumnIDs=1, rgColumnIDs=NULL
int Variation_7();
// @cmember E_INVALIDARG: rgColumns is NULL
int Variation_8();
// }} TCW_TESTVARS_END
} ;
// {{ TCW_TESTCASE(MapColIDRow_Rowset)
#define THE_CLASS MapColIDRow_Rowset
BEG_TEST_CASE(MapColIDRow_Rowset, IColInfo, L"MapColumnIDs on a Row object")
TEST_VARIATION(1, L"S_OK: cColumnIDs = 0")
TEST_VARIATION(2, L"S_OK: All columns returned by GetColInfo")
TEST_VARIATION(3, L"S_OK: Subset of columns returned by GetColInfo")
TEST_VARIATION(4, L"S_OK: Columns out of order")
TEST_VARIATION(5, L"DB_S_ERRORSOCCURRED: One ColumnID is invalid")
TEST_VARIATION(6, L"DB_E_ERRORSOCCURRED: All ColumnIDs are invalid")
TEST_VARIATION(7, L"E_INVALIDARG: cColumnIDs=1, rgColumnIDs=NULL")
TEST_VARIATION(8, L"E_INVALIDARG: rgColumns is NULL")
END_TEST_CASE()
#undef THE_CLASS
// }} TCW_TESTCASE_END
// }} TCW_TEST_CASE_MAP_END
// {{ TCW_TEST_CASE_MAP(ZombieClassCmd)
//--------------------------------------------------------------------
// @class zombie on command
//
class ZombieClassCmd : public Zombie {
private:
// @cmember Static array of variations
DECLARE_TEST_CASE_DATA();
public:
// {{ TCW_DECLARE_FUNCS
// @cmember Execution Routine
DECLARE_TEST_CASE_FUNCS(ZombieClassCmd,Zombie);
// }} TCW_DECLARE_FUNCS_END
// @cmember Initialization Routine
virtual BOOL Init();
// @cmember Termination Routine
virtual BOOL Terminate();
// {{ TCW_TESTVARS()
// @cmember Abort with fRetaining set to TRUE
int Variation_1();
// @cmember Abort with fRetaining set to FALSE
int Variation_2();
// @cmember Commit with fRetaining set to TRUE
int Variation_3();
// @cmember Commit with fRetaining set to FALSE
int Variation_4();
// }} TCW_TESTVARS_END
};
// {{ TCW_TESTCASE(ZombieClassCmd)
#define THE_CLASS ZombieClassCmd
BEG_TEST_CASE(ZombieClassCmd, Zombie, L"zombie on command")
TEST_VARIATION(1, L"Abort with fRetaining set to TRUE")
TEST_VARIATION(2, L"Abort with fRetaining set to FALSE")
TEST_VARIATION(3, L"Commit with fRetaining set to TRUE")
TEST_VARIATION(4, L"Commit with fRetaining set to FALSE")
END_TEST_CASE()
#undef THE_CLASS
// }} TCW_TESTCASE_END
// }} TCW_TEST_CASE_MAP_END
// {{ TCW_TEST_CASE_MAP(ZombieClassRowset)
//--------------------------------------------------------------------
// @class zombie on a rowset
//
class ZombieClassRowset : public Zombie {
private:
// @cmember Static array of variations
DECLARE_TEST_CASE_DATA();
public:
// {{ TCW_DECLARE_FUNCS
// @cmember Execution Routine
DECLARE_TEST_CASE_FUNCS(ZombieClassRowset,Zombie);
// }} TCW_DECLARE_FUNCS_END
// @cmember Initialization Routine
virtual BOOL Init();
// @cmember Termination Routine
virtual BOOL Terminate();
// {{ TCW_TESTVARS()
// @cmember Abort with fRetaining set to TRUE
int Variation_1();
// @cmember Abort with fRetaining set to FALSE
int Variation_2();
// @cmember Commit with fRetaining set to TRUE
int Variation_3();
// @cmember Commit with fRetaining set to FALSE
int Variation_4();
// @cmember Abort with fRetaining set to TRUE for Multiple Rowsets
int Variation_5();
// @cmember Abort with fRetaining set to FALSE for Multiple Rowsets
int Variation_6();
// @cmember Commit with fRetaining set to TRUE for Multiple Rowsets
int Variation_7();
// @cmember Commit with fRetaining set to FALSE for Multiple Rowsets
int Variation_8();
// }} TCW_TESTVARS_END
};
// {{ TCW_TESTCASE(ZombieClassRowset)
#define THE_CLASS ZombieClassRowset
BEG_TEST_CASE(ZombieClassRowset, Zombie, L"zombie on a rowset")
TEST_VARIATION(1, L"Abort with fRetaining set to TRUE")
TEST_VARIATION(2, L"Abort with fRetaining set to FALSE")
TEST_VARIATION(3, L"Commit with fRetaining set to TRUE")
TEST_VARIATION(4, L"Commit with fRetaining set to FALSE")
TEST_VARIATION(5, L"Abort with fRetaining set to TRUE for Multiple Rowsets")
TEST_VARIATION(6, L"Abort with fRetaining set to FALSE for Multiple Rowsets")
TEST_VARIATION(7, L"Commit with fRetaining set to TRUE for Multiple Rowsets")
TEST_VARIATION(8, L"Commit with fRetaining set to FALSE for Multiple Rowsets")
END_TEST_CASE()
#undef THE_CLASS
// }} TCW_TESTCASE_END
// }} TCW_TEST_CASE_MAP_END
// {{ TCW_TEST_CASE_MAP(ZombieClassRow)
//*-----------------------------------------------------------------------
// @class zombie on a row
//
class ZombieClassRow : public Zombie {
private:
// @cmember Static array of variations
DECLARE_TEST_CASE_DATA();
public:
// {{ TCW_DECLARE_FUNCS
// @cmember Execution Routine
DECLARE_TEST_CASE_FUNCS(ZombieClassRow,Zombie);
// }} TCW_DECLARE_FUNCS_END
// @cmember Initialization Routine
virtual BOOL Init();
// @cmember Termination Routine
virtual BOOL Terminate();
// {{ TCW_TESTVARS()
// @cmember Abort with fRetaining set to TRUE
int Variation_1();
// @cmember Abort with fRetaining set to FALSE
int Variation_2();
// @cmember Commit with fRetaining set to TRUE
int Variation_3();
// @cmember Commit with fRetaining set to FALSE
int Variation_4();
// }} TCW_TESTVARS_END
} ;
// {{ TCW_TESTCASE(ZombieClassRow)
#define THE_CLASS ZombieClassRow
BEG_TEST_CASE(ZombieClassRow, Zombie, L"zombie on a row")
TEST_VARIATION(1, L"Abort with fRetaining set to TRUE")
TEST_VARIATION(2, L"Abort with fRetaining set to FALSE")
TEST_VARIATION(3, L"Commit with fRetaining set to TRUE")
TEST_VARIATION(4, L"Commit with fRetaining set to FALSE")
END_TEST_CASE()
#undef THE_CLASS
// }} TCW_TESTCASE_END
// }} TCW_TEST_CASE_MAP_END
// {{ TCW_TEST_CASE_MAP(ExtendedErrors)
//--------------------------------------------------------------------
// @class extended error tests
//
class ExtendedErrors : public IColInfo {
private:
// @cmember Static array of variations
DECLARE_TEST_CASE_DATA();
public:
// {{ TCW_DECLARE_FUNCS
// @cmember Execution Routine
DECLARE_TEST_CASE_FUNCS(ExtendedErrors,IColInfo);
// }} TCW_DECLARE_FUNCS_END
// @cmember Initialization Routine
virtual BOOL Init();
// @cmember Termination Routine
virtual BOOL Terminate();
// {{ TCW_TESTVARS()
// @cmember Valid IColumnsInfo calls on the Command with previous error object existing
int Variation_1();
// @cmember Invalid IColumnsInfo calls on the Command with previous eror object existing
int Variation_2();
// @cmember Invalid IColumnsInfo calls on the Command with no previous error object existing
int Variation_3();
// @cmember Valid IColumnsInfo calls on the Rowset with previous error object existing
int Variation_4();
// @cmember Invalid IColumnsInfo calls on the Rowset with previous error object exisiting
int Variation_5();
// @cmember Invalid IColumnsInfo calls on the Rowset with no previous error object exisiting
int Variation_6();
// }} TCW_TESTVARS_END
};
// {{ TCW_TESTCASE(ExtendedErrors)
#define THE_CLASS ExtendedErrors
BEG_TEST_CASE(ExtendedErrors, IColInfo, L"extended error tests")
TEST_VARIATION(1, L"Valid IColumnsInfo calls on the Command with previous error object existing")
TEST_VARIATION(2, L"Invalid IColumnsInfo calls on the Command with previous eror object existing")
TEST_VARIATION(3, L"Invalid IColumnsInfo calls on the Command with no previous error object existing")
TEST_VARIATION(4, L"Valid IColumnsInfo calls on the Rowset with previous error object existing")
TEST_VARIATION(5, L"Invalid IColumnsInfo calls on the Rowset with previous error object exisiting")
TEST_VARIATION(6, L"Invalid IColumnsInfo calls on the Rowset with no previous error object exisiting")
END_TEST_CASE()
#undef THE_CLASS
// }} TCW_TESTCASE_END
// }} TCW_TEST_CASE_MAP_END
// }} END_DECLARE_TEST_CASES()
////////////////////////////////////////////////////////////////////////
// Copying Test Cases to make duplicate ones.
//
////////////////////////////////////////////////////////////////////////
#define COPY_TEST_CASE(theClass, baseClass) \
class theClass : public baseClass \
{ \
public: \
static const WCHAR m_wszTestCaseName[]; \
DECLARE_TEST_CASE_FUNCS(theClass, baseClass); \
}; \
const WCHAR theClass::m_wszTestCaseName[] = { L#theClass }; \
#define TEST_CASE_WITH_PARAM(iCase, theClass, param) \
case iCase: \
pCTestCase = new theClass(NULL); \
((theClass*)pCTestCase)->SetTestCaseParam(param); \
pCTestCase->SetOwningMod(iCase-1, pCThisTestModule); \
return pCTestCase;
//2
COPY_TEST_CASE(GetColInfoRow_Cmd, GetColInfoRow_Rowset)
COPY_TEST_CASE(MapColIDRow_Cmd, MapColIDRow_Rowset)
COPY_TEST_CASE(GetResColInfoRow_Cmd, GetResColInfoRow_Rowset)
//3
COPY_TEST_CASE(GetColInfoRow_OpenRW, GetColInfoRow_Rowset)
COPY_TEST_CASE(MapColIDRow_OpenRW, MapColIDRow_Rowset)
COPY_TEST_CASE(GetResColInfoRow_OpenRW, GetResColInfoRow_Rowset)
//4
COPY_TEST_CASE(GetColInfoRow_Bind, GetColInfoRow_Rowset)
COPY_TEST_CASE(MapColIDRow_Bind, MapColIDRow_Rowset)
COPY_TEST_CASE(GetResColInfoRow_Bind, GetResColInfoRow_Rowset)
//5
COPY_TEST_CASE(GetColInfoRow_IColInfo2, GetColInfoRow_Rowset)
COPY_TEST_CASE(MapColIDRow_IColInfo2, MapColIDRow_Rowset)
COPY_TEST_CASE(GetColInfo_SingSel, GetColInfo_Command)
COPY_TEST_CASE(MapColID_SingSel, MapColID_Command)
//NOTE: The #ifdef block below is only for test wizard. TestWizard has too many
//strict rules in the parsing code and requires a 1:1 correspondence between
//testcases and the map. What the #else section is doing is basically "reusing"
//existing testcases by just passing in a parameter which changes the behvior.
//So we make LTM think there are various cases in here with different names, but in
//reality we only have to maintain code for the unique cases.
#if 0
// {{ TCW_TESTMODULE(ThisModule)
TEST_MODULE(13, ThisModule, gwszModuleDescrip)
TEST_CASE(1, GetColInfo_Command)
TEST_CASE(2, GetColInfo_ExecuteRowset)
TEST_CASE(3, GetColInfo_OpenRowset)
TEST_CASE(4, GetColInfoRow_Rowset)
TEST_CASE(5, GetResColInfoRow_Rowset)
TEST_CASE(6, MapColID_Command)
TEST_CASE(7, MapColID_ExecuteRowset)
TEST_CASE(8, MapColID_OpenRowset)
TEST_CASE(9, MapColIDRow_Rowset)
TEST_CASE(10, ZombieClassCmd)
TEST_CASE(11, ZombieClassRowset)
TEST_CASE(12, ZombieClassRow)
TEST_CASE(13, ExtendedErrors)
END_TEST_MODULE()
// }} TCW_TESTMODULE_END
#else
TEST_MODULE(26, ThisModule, gwszModuleDescrip)
TEST_CASE_WITH_PARAM(1, GetColInfo_Command, TC_Cmd)
TEST_CASE_WITH_PARAM(2, GetColInfo_SingSel, TC_SingSel)
TEST_CASE(3, GetColInfo_ExecuteRowset)
TEST_CASE(4, GetColInfo_OpenRowset)
TEST_CASE(5, GetColInfoRow_Rowset)
TEST_CASE_WITH_PARAM(6, GetColInfoRow_Cmd, TC_Cmd)
TEST_CASE_WITH_PARAM(7, GetColInfoRow_OpenRW, TC_OpenRW)
TEST_CASE_WITH_PARAM(8, GetColInfoRow_Bind, TC_Bind)
TEST_CASE_WITH_PARAM(9, GetColInfoRow_IColInfo2, TC_IColInfo2)
TEST_CASE(10, GetResColInfoRow_Rowset)
TEST_CASE_WITH_PARAM(11, GetResColInfoRow_Cmd, TC_Cmd)
TEST_CASE_WITH_PARAM(12, GetResColInfoRow_OpenRW, TC_OpenRW)
TEST_CASE_WITH_PARAM(13, GetResColInfoRow_Bind, TC_Bind)
TEST_CASE_WITH_PARAM(14, MapColID_Command, TC_Cmd)
TEST_CASE_WITH_PARAM(15, MapColID_SingSel, TC_SingSel)
TEST_CASE(16, MapColID_ExecuteRowset)
TEST_CASE(17, MapColID_OpenRowset)
TEST_CASE(18, MapColIDRow_Rowset)
TEST_CASE_WITH_PARAM(19, MapColIDRow_Cmd, TC_Cmd)
TEST_CASE_WITH_PARAM(20, MapColIDRow_OpenRW, TC_OpenRW)
TEST_CASE_WITH_PARAM(21, MapColIDRow_Bind, TC_Bind)
TEST_CASE_WITH_PARAM(22, MapColIDRow_IColInfo2, TC_IColInfo2)
TEST_CASE(23, ZombieClassCmd)
TEST_CASE(24, ZombieClassRowset)
TEST_CASE(25, ZombieClassRow)
TEST_CASE(26, ExtendedErrors)
END_TEST_MODULE()
#endif
// {{ TCW_TC_PROTOTYPE(GetColInfo_Command)
//*-----------------------------------------------------------------------
//| Test Case: GetColInfo_Command - IColumnsInfo on a command object
//| Created: 09/20/96
//| Updated: 04/25/98
//*-----------------------------------------------------------------------
//--------------------------------------------------------------------
// @mfunc TestCase Initialization Routine
//
// @rdesc TRUE or FALSE
//
BOOL GetColInfo_Command::Init()
{
// Initialize for IColumnsInfo::GetColumnInfo
m_Method = GETCOLINFO;
ULONG_PTR ulOleObj = 0;
if(!GetProperty(DBPROP_OLEOBJECTS, DBPROPSET_DATASOURCEINFO,
GetModInfo()->GetThisTestModule()->m_pIUnknown, &ulOleObj) ||
!(ulOleObj & DBPROPVAL_OO_SINGLETON))
{
if(m_eTestCase == TC_SingSel)
{
odtLog<<L"INFO: Obtaining row objects directly from commands is not supported.\n";
return TEST_SKIPPED;
}
}
// {{ TCW_INIT_BASECLASS_CHECK
return IColInfo::Init(COMMAND_INTERFACE);
// }}
}
// {{ TCW_VAR_PROTOTYPE(1)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: cColumns is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_1()
{
TBEGIN;
// Initialize the variation
INIT;
// Set text on command
TESTC_(SetCommandText(m_pIMalloc, m_pICommand, m_pTable,
NULL, eSELECT, SELECT_COLLISTFROMTBL, NULL),S_OK);
// Prepare the Statement
if( m_ePreparation == SUPPORTED ) {
TESTC_(m_hr=PrepareCommand(m_pICommand,PREPARE,1),S_OK);
}
if(m_eTestCase == TC_SingSel)
{
TESTC(GetRowIColumnsInfo(m_pICommand, (IUnknown**)&m_pIColumnsInfo))
}
else
{
TESTC(VerifyInterface(m_pICommand, IID_IColumnsInfo,
COMMAND_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
}
// Dirty the output params
m_rgInfo = INVALID(DBCOLUMNINFO*);
m_pStringsBuffer = INVALID(WCHAR*);
// Run testing interface, validate params
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(NULL, &m_rgInfo,
&m_pStringsBuffer), E_INVALIDARG);
// Validate the columns
CheckEachColumn(m_hr);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(2)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: rgInfo is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_2()
{
TBEGIN;
// Initialize the variation
INIT;
// Set text on command
TESTC_(SetCommandText(m_pIMalloc, m_pICommand, m_pTable,
NULL, eSELECT, SELECT_COLLISTFROMTBL, NULL),S_OK);
// Prepare the Statement
if( m_ePreparation == SUPPORTED ) {
TESTC_(m_hr=PrepareCommand(m_pICommand,PREPARE,1),S_OK);
}
if(m_eTestCase == TC_SingSel)
{
TESTC(GetRowIColumnsInfo(m_pICommand, (IUnknown**)&m_pIColumnsInfo))
}
else
{
TESTC(VerifyInterface(m_pICommand, IID_IColumnsInfo,
COMMAND_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
}
// Dirty the output params
m_cColumns = 99;
m_pStringsBuffer = INVALID(WCHAR*);
// Run testing interface, validate params
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns,
NULL, &m_pStringsBuffer), E_INVALIDARG);
// Validate the columns
CheckEachColumn(m_hr);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(3)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: pStringsBuffer is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_3()
{
TBEGIN;
// Initialize the variation
INIT;
// Set text on command
TESTC_(SetCommandText(m_pIMalloc, m_pICommand, m_pTable,
NULL, eSELECT, SELECT_COLLISTFROMTBL, NULL),S_OK);
// Prepare the Statement
if( m_ePreparation == SUPPORTED ) {
TESTC_(m_hr=PrepareCommand(m_pICommand,PREPARE,1),S_OK);
}
if(m_eTestCase == TC_SingSel)
{
TESTC(GetRowIColumnsInfo(m_pICommand, (IUnknown**)&m_pIColumnsInfo))
}
else
{
TESTC(VerifyInterface(m_pICommand, IID_IColumnsInfo,
COMMAND_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
}
// Dirty the output params
m_cColumns = 99;
m_rgInfo = INVALID(DBCOLUMNINFO*);
// Run testing interface, validate params
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns,
&m_rgInfo, NULL), E_INVALIDARG);
// Validate the columns
CheckEachColumn(m_hr);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(4)
//*-----------------------------------------------------------------------
// @mfunc DB_E_NOCOMMAND: CommandText is not Set
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_4()
{
TBEGIN;
// Initialize the variation
INIT;
if(m_eTestCase == TC_SingSel)
goto CLEANUP; //skip test.
TESTC(VerifyInterface(m_pICommand, IID_IColumnsInfo,
COMMAND_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Dirty the output params
m_cColumns = 99;
m_rgInfo = INVALID(DBCOLUMNINFO*);
m_pStringsBuffer= INVALID(WCHAR*);
// Validate return code
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns,
&m_rgInfo, &m_pStringsBuffer), DB_E_NOCOMMAND);
// Validate the columns
CheckEachColumn(m_hr);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(5)
//*-----------------------------------------------------------------------
// @mfunc DB_E_NOCOMMAND: CommandText is Set to Empty
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_5()
{
TBEGIN;
WCHAR * pSQLSet = NULL;
if(m_eTestCase==TC_SingSel)
goto CLEANUP;
// Initialize the variation
INIT;
// Dirty the output params
m_cColumns = 99;
m_rgInfo = INVALID(DBCOLUMNINFO*);
m_pStringsBuffer= INVALID(WCHAR*);
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSQL,
SELECT_ALLFROMTBL, pSQLSet, NEITHER, 1), DB_E_NOCOMMAND);
// Validate the columns
CheckEachColumn(m_hr);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(6)
//*-----------------------------------------------------------------------
// @mfunc DB_E_NOCOMMAND: CommandText is Set to NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_6()
{
TBEGIN;
if(m_eTestCase==TC_SingSel)
goto CLEANUP;
// Initialize the variation
INIT;
// Dirty the output params
m_cColumns = 99;
m_rgInfo = INVALID(DBCOLUMNINFO*);
m_pStringsBuffer= INVALID(WCHAR*);
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSQL,
SELECT_ALLFROMTBL, NULL, NEITHER, 1), DB_E_NOCOMMAND);
// Validate the columns
CheckEachColumn(m_hr);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(7)
//*-----------------------------------------------------------------------
// @mfunc DB_E_NOTPREPARED/S_OK: CommandText is Set, Prepared, and Unprepared
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_7()
{
TBEGIN;
HRESULT Exphr = S_OK;
if(m_eTestCase==TC_SingSel)
goto CLEANUP;
// Initialize the variation
INIT;
// Dirty the output params
m_cColumns = 99;
m_rgInfo = INVALID(DBCOLUMNINFO*);
m_pStringsBuffer= INVALID(WCHAR*);
// Check to see if the Provider supports ICommandPrepare
if( m_ePreparation == SUPPORTED )
Exphr = DB_E_NOTPREPARED;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, BOTH, 1), Exphr);
// Validate the columns
CheckEachColumn(m_hr);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(8)
//*-----------------------------------------------------------------------
// @mfunc DB_E_NOTPREPARED/S_OK: CommandText is Set, but not Prepared
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_8()
{
TBEGIN;
HRESULT Exphr = S_OK;
if(m_eTestCase==TC_SingSel)
goto CLEANUP;
// Initialize the variation
INIT;
// Dirty the output params
m_cColumns = 99;
m_rgInfo = INVALID(DBCOLUMNINFO*);
m_pStringsBuffer= INVALID(WCHAR*);
// Check to see if the Provider supports ICommandPrepare
if( m_ePreparation == SUPPORTED )
Exphr = DB_E_NOTPREPARED;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER, 1), Exphr);
// Validate the columns
CheckEachColumn(m_hr);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(9)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText is Set and Prepared
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_9()
{
TBEGIN;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE, 1,
0, (m_eTestCase==TC_SingSel)), S_OK);
// Validate the columns
CheckEachColumn(m_hr);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(10)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText includes duplicate columns
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_10()
{
TBEGIN;
// Initialize the variation
INIT;
// Run testing interface, validate params
TEST2C_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_DUPLICATECOLUMNS, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)), S_OK, DB_E_NOTSUPPORTED);
//Skip variation if query is not supported.
TESTC_PROVIDER(m_hr != DB_E_NOTSUPPORTED)
// Validate the columns
CheckEachColumn(m_hr);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(11)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText is Set, then change the Text
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_11()
{
TBEGIN;
HRESULT hr=E_FAIL;
// Initialize the variation
INIT;
// Set text on command
TESTC_(SetCommandText(m_pIMalloc, m_pICommand, m_pTable,
NULL, eSELECT, SELECT_COLLISTFROMTBL, NULL),S_OK);
// Prepare the Statement
if( m_ePreparation == SUPPORTED ) {
TESTC_(m_hr=PrepareCommand(m_pICommand,PREPARE,1),S_OK);
}
// Set text on command
TEST2C_(hr = SetCommandText(m_pIMalloc, m_pICommand, m_pTable,
NULL, eSELECT, SELECT_REVCOLLIST, NULL),S_OK, DB_E_NOTSUPPORTED);
//Skip variation if query is not supported.
TESTC_PROVIDER(hr != DB_E_NOTSUPPORTED)
// Prepare the Statement
if( m_ePreparation == SUPPORTED ) {
TESTC_(m_hr=PrepareCommand(m_pICommand,PREPARE,1),S_OK);
}
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_ALLFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)), S_OK);
// Validate the columns
CheckEachColumn(m_hr);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(12)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText contains a count(*)
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_12()
{
TBEGIN;
// Initialize the variation
INIT;
TEST2C_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COUNT, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)), S_OK, DB_E_NOTSUPPORTED);
//Skip variation if query is not supported.
TESTC_PROVIDER(m_hr != DB_E_NOTSUPPORTED);
// Validate the columns
CheckEachColumn(m_hr,0,SELECT_COUNT);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(13)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText contains different column names
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_13()
{
TBEGIN;
// Initialize the variation
INIT;
TEST2C_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_CHANGECOLNAME, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)), S_OK, DB_E_NOTSUPPORTED);
//Skip variation if query is not supported.
TESTC_PROVIDER(m_hr != DB_E_NOTSUPPORTED)
// Validate the columns
CheckEachColumn(m_hr,0,SELECT_CHANGECOLNAME);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(14)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText contains a insert statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_14()
{
TBEGIN;
if(m_eTestCase==TC_SingSel)
goto CLEANUP;
//If the provider is read only, skip the variation.
if( g_fReadOnlyProvider || m_pTable->GetSQLSupport() == DBPROPVAL_SQL_NONE )
{
odtLog << L"Provider is ReadOnly." << ENDL;
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(FALSE, FALSE, FALSE, eSELECT,
INSERT_1ROW, NULL, PREPARE), S_OK);
// Validate the columns
CheckEachColumn(m_hr);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(15)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText contains a select from an Empty Rowset
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_15()
{
TBEGIN;
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
// Initialize the variation
INIT;
if(m_eTestCase==TC_SingSel)
{
IRow* pIRow = NULL;
hr=SetCommandText(m_pIMalloc,m_pICommand,m_pTable,m_pTable2->GetTableName(),
eSELECT,SELECT_EMPTYROWSET,NULL,NULL,NULL);
//Skip variation if query is not supported.
TESTC_PROVIDER(hr != DB_E_NOTSUPPORTED)
CHECK(hr, S_OK);
if(m_ePreparation == SUPPORTED)
COMPARE(SUCCEEDED(PrepareCommand(m_pICommand,PREPARE,0)), TRUE);
CHECK(m_pICommand->Execute(NULL, IID_IRow, NULL, NULL, (IUnknown**)&pIRow), DB_E_NOTFOUND);
SAFE_RELEASE(pIRow);
FREE;
return TEST_PASS;
}
TEST2C_(hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_EMPTYROWSET, NULL, PREPARE), S_OK, DB_E_NOTSUPPORTED)
//Skip variation if query is not supported.
TESTC_PROVIDER(hr != DB_E_NOTSUPPORTED)
// Validate the columns
CheckEachColumn(hr);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(16)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Base table contains no rows
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_16()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
ULONG cRows = 0;
// Initialize the variation
INIT;
//Check to see if the DSO is ReadOnly
//Commands are required for Delete
if(!g_fReadOnlyProvider && m_pTable->GetSQLSupport() != DBPROPVAL_SQL_NONE)
{
// Delete all rows in the table.
if (!CHECK(m_pTable->Delete(),S_OK))
goto CLEANUP;
}
else
{
// Drop the table and create an empty one
if (!CHECK(m_pTable->DropTable(),S_OK))
goto CLEANUP;
if (!SUCCEEDED(m_pTable->CreateTable(0,1,NULL,PRIMARY,TRUE)))
goto CLEANUP;
}
if(m_eTestCase==TC_SingSel)
{
IRow* pIRow = NULL;
TEST2C_(hr=SetCommandText(m_pIMalloc,m_pICommand,m_pTable,m_pTable2->GetTableName(),
eSELECT,SELECT_EMPTYROWSET,NULL,NULL,NULL), S_OK, DB_E_NOTSUPPORTED);
//Skip variation if query is not supported.
if(hr == DB_E_NOTSUPPORTED)
{
FREE;
return TEST_SKIPPED;
}
if(m_ePreparation == SUPPORTED)
COMPARE(SUCCEEDED(PrepareCommand(m_pICommand,PREPARE,0)), TRUE);
CHECK(m_pICommand->Execute(NULL, IID_IRow, NULL, NULL, (IUnknown**)&pIRow), DB_E_NOTFOUND);
SAFE_RELEASE(pIRow);
FREE;
return TEST_PASS;
}
if (CHECK(hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT, SELECT_COLLISTFROMTBL, NULL, PREPARE), S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
CLEANUP:
for(cRows=0;cRows<10;cRows++)
m_pTable->Insert();
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(17)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText contains a update statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_17()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if(m_eTestCase==TC_SingSel)
return TEST_SKIPPED;
//If the provider is read only, skip the variation.
if(g_fReadOnlyProvider || m_pTable->GetSQLSupport() == DBPROPVAL_SQL_NONE)
{
odtLog << L"Provider is ReadOnly." << ENDL;
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
if (CHECK(hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eUPDATE,
SELECT_EMPTYROWSET, NULL, PREPARE), S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(18)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText contains a delete statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_18()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if(m_eTestCase==TC_SingSel)
return TEST_SKIPPED;
//If the provider is read only, skip the variation.
if(g_fReadOnlyProvider || m_pTable->GetSQLSupport() == DBPROPVAL_SQL_NONE)
{
odtLog << L"Provider is ReadOnly." << ENDL;
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eDELETE,
SELECT_EMPTYROWSET, NULL, PREPARE);
if (CHECK(hr, S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(19)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_IRowsetLocate on a Select Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_19()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if(m_eTestCase==TC_SingSel)
return TEST_SKIPPED;
if (!SupportedProperty(DBPROP_IRowsetLocate, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"IRowsetLocate is not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
if (CHECK(hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_ALLFROMTBL, NULL, PREPARE, 1, DBPROP_IRowsetLocate), S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr, DBPROP_IRowsetLocate);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(20)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_BOOKMARKS on a Select Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_20()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if(m_eTestCase==TC_SingSel)
return TEST_SKIPPED;
if (!SupportedProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"Bookmarks are not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
if (CHECK(hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_ALLFROMTBL, NULL, PREPARE, 1, DBPROP_BOOKMARKS), S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr,DBPROP_BOOKMARKS);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(21)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_BOOKMARKS on a Insert Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_21()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if(m_eTestCase==TC_SingSel)
return TEST_SKIPPED;
if (!SupportedProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"Bookmarks are not supported.\n";
return TEST_SKIPPED;
}
//If the provider is read only, skip the variation.
if(g_fReadOnlyProvider || m_pTable->GetSQLSupport() == DBPROPVAL_SQL_NONE)
{
odtLog << L"Provider is ReadOnly." << ENDL;
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
INSERT_1ROW, NULL, PREPARE, 1, DBPROP_BOOKMARKS);
if (CHECK(hr, S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr,DBPROP_BOOKMARKS);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(22)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_DEFERRED on a Select Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_22()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if(m_eTestCase==TC_SingSel)
return TEST_SKIPPED;
if (!SupportedProperty(DBPROP_DEFERRED, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"Deferred is not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
if (CHECK(hr=ExecuteMethod_cmd(FALSE, FALSE, FALSE, eSELECT,
SELECT_ALLFROMTBL, NULL, PREPARE, 1, DBPROP_DEFERRED), S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr,DBPROP_DEFERRED);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(23)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_CACHEDEFERRED on a Select Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_23()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if(m_eTestCase==TC_SingSel)
return TEST_SKIPPED;
if (!SupportedProperty(DBPROP_CACHEDEFERRED, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"Cache Deferred is not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
if (CHECK(hr=ExecuteMethod_cmd(FALSE, FALSE, FALSE, eSELECT,
SELECT_ALLFROMTBL, NULL, PREPARE, 1, DBPROP_CACHEDEFERRED), S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr,DBPROP_CACHEDEFERRED);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(24)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_MAYWRITECOLUMN on a Select Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_24()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if(m_eTestCase==TC_SingSel)
return TEST_SKIPPED;
if (!SupportedProperty(DBPROP_MAYWRITECOLUMN, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"May Write Column is not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
if (CHECK(hr=ExecuteMethod_cmd(FALSE, FALSE, FALSE, eSELECT,
SELECT_ALLFROMTBL, NULL, PREPARE, 1, DBPROP_MAYWRITECOLUMN), S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr,DBPROP_MAYWRITECOLUMN);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(25)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText contains a select from view
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_25()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if(m_eTestCase==TC_SingSel)
return TEST_SKIPPED;
//If the provider is read only, skip the variation.
if(g_fReadOnlyProvider || m_pTable->GetSQLSupport() == DBPROPVAL_SQL_NONE)
{
odtLog << L"Provider is ReadOnly." << ENDL;
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_REVCOLLISTFROMVIEW, NULL, PREPARE);
// Check to see if the create view failed
if (FAILED(hr))
{
odtLog<<L"Create view not supported" <<ENDL;
fResult = TEST_PASS;
}
else
{
// Check to see if everything worked
if(CHECK(hr, S_OK))
fResult = TEST_PASS;
}
// Validate the columns
CheckEachColumn(hr);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(26)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_BOOKMARKS on a Select Statement with Column List
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_26()
{
TBEGIN;
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if(m_eTestCase==TC_SingSel)
return TEST_SKIPPED;
if (!SupportedProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"Bookmarks are not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
TEST2C_(hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_ALL_WITH_SEARCHABLE_AND_UPDATEABLE,
NULL, PREPARE, 1, DBPROP_BOOKMARKS), S_OK, DB_E_NOTSUPPORTED)
//Skip variation if query is not supported.
TESTC_PROVIDER(hr != DB_E_NOTSUPPORTED)
// Validate the columns
CheckEachColumn(hr,DBPROP_BOOKMARKS);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(27)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText contains a LEFT OUTER JOIN
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_27()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if(m_eTestCase==TC_SingSel)
return TEST_SKIPPED;
// Check the SQL Support of the Provider
if( !(m_pTable->GetSQLSupport() & DBPROPVAL_SQL_ODBC_CORE) )
{
odtLog << L"Provider does not support outer joins." << ENDL;
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_LEFTOUTERJOIN, NULL, PREPARE);
// Check to see if the left outer joins work
if (FAILED(hr))
{
odtLog<<L"Left Outer Joins not supported" <<ENDL;
fResult = TEST_PASS;
}
else
{
// Check to see if everything worked
if(CHECK(hr, S_OK))
fResult = TEST_PASS;
}
// Validate the columns
CheckEachColumn(hr, 0, SELECT_LEFTOUTERJOIN);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(28)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText contains a RIGHT OUTER JOIN
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_28()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
// Check the SQL Support of the Provider
if( !(m_pTable->GetSQLSupport() & DBPROPVAL_SQL_ODBC_CORE) )
{
odtLog << L"Provider does not support outer joins." << ENDL;
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
if(m_eTestCase==TC_SingSel)
{
IRow* pIRow = NULL;
CHECK(hr=SetCommandText(m_pIMalloc,m_pICommand,m_pTable,m_pTable2->GetTableName(),
eSELECT,SELECT_RIGHTOUTERJOIN,NULL,NULL,NULL), S_OK);
if(m_ePreparation == SUPPORTED)
COMPARE(SUCCEEDED(PrepareCommand(m_pICommand,PREPARE,0)), TRUE);
hr = m_pICommand->Execute(NULL, IID_IRow, NULL, NULL, (IUnknown**)&pIRow);
COMPARE((hr==DB_E_NOTFOUND) || (hr==DB_E_ERRORSINCOMMAND), TRUE);
SAFE_RELEASE(pIRow);
FREE;
return TEST_PASS;
}
hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_RIGHTOUTERJOIN, NULL, PREPARE);
// Check to see if the right outer joins work
if (FAILED(hr))
{
odtLog<<L"Right Outer Joins not supported" <<ENDL;
fResult = TEST_PASS;
}
else
{
// Check to see if everything worked
if(CHECK(hr, S_OK))
fResult = TEST_PASS;
}
// Validate the columns
CheckEachColumn(hr, 0, SELECT_RIGHTOUTERJOIN);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(29)
//*-----------------------------------------------------------------------
// @mfunc DB_E_NOTABLE: Call with a Table that doesn't exist
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_Command::Variation_29()
{
TBEGIN;
if(m_eTestCase==TC_SingSel)
return TEST_SKIPPED;
// Initialize the variation
INIT;
TEST3C_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_NO_TABLE, NULL, PREPARE), DB_E_NOTABLE, DB_E_ERRORSINCOMMAND, DB_E_NOTSUPPORTED);
//Skip variation if query is not supported.
TESTC_PROVIDER(m_hr != DB_E_NOTSUPPORTED)
// Validate the columns
CheckEachColumn(m_hr, 0, SELECT_NO_TABLE);
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_TERMINATE_METHOD
//--------------------------------------------------------------------
// @mfunc TestCase Termination Routine
//
// @rdesc TRUE or FALSE
//
BOOL GetColInfo_Command::Terminate()
{
// {{ TCW_TERM_BASECLASS_CHECK2
return(IColInfo::Terminate());
} // }}
// }}
// }}
// {{ TCW_TC_PROTOTYPE(GetColInfo_ExecuteRowset)
//*-----------------------------------------------------------------------
//| Test Case: GetColInfo_ExecuteRowset - IColumnsInfo on a rowset object
//| Created: 09/20/96
//| Updated: 04/25/98
//*-----------------------------------------------------------------------
//--------------------------------------------------------------------
// @mfunc TestCase Initialization Routine
//
// @rdesc TRUE or FALSE
//
BOOL GetColInfo_ExecuteRowset::Init()
{
// Initialize for IColumnsInfo::GetColumnInfo
m_Method = GETCOLINFO;
// {{ TCW_INIT_BASECLASS_CHECK
return IColInfo::Init(COMMAND_INTERFACE);
// }}
}
// {{ TCW_VAR_PROTOTYPE(1)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: cColumns is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_1()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
IID iid = IID_IRowset;
// Initialize the variation
INIT;
// SetText on command
if (FAILED(SetCommandText(m_pIMalloc, m_pICommand, m_pTable,
NULL, eSELECT, SELECT_COLLISTFROMTBL, NULL)))
goto CLEANUP;
if (!CHECK(hr=m_pICommand->Execute(NULL, iid, NULL, &m_cRowsAffected,
(IUnknown **) &m_pIRowset),S_OK))
goto CLEANUP;
if (!m_pIRowset)
goto CLEANUP;
// Release the IColumnsInfo Pointer
SAFE_RELEASE(m_pIColumnsInfo);
if (FAILED(m_pIRowset->QueryInterface(IID_IColumnsInfo,
(void **)&m_pIColumnsInfo)))
goto CLEANUP;
// Dirty the output params
m_rgInfo = INVALID(DBCOLUMNINFO*);
m_pStringsBuffer= INVALID(WCHAR*);
// Run testing interface, validate params
if (CHECK(hr=m_pIColumnsInfo->GetColumnInfo(NULL, &m_rgInfo,
&m_pStringsBuffer), E_INVALIDARG))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(2)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: rgInfo is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_2()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
IID iid = IID_IRowset;
// Initialize the variation
INIT;
// SetText on command
if (FAILED(SetCommandText(m_pIMalloc, m_pICommand, m_pTable,
NULL, eSELECT, SELECT_COLLISTFROMTBL, NULL)))
goto CLEANUP;
if (!CHECK(hr=m_pICommand->Execute(NULL, iid, NULL, &m_cRowsAffected,
(IUnknown **) &m_pIRowset),S_OK))
goto CLEANUP;
if (!m_pIRowset)
goto CLEANUP;
// Release the ColumnsInfo Pointer
SAFE_RELEASE(m_pIColumnsInfo);
if (FAILED(m_pIRowset->QueryInterface(IID_IColumnsInfo,
(void **)&m_pIColumnsInfo)))
goto CLEANUP;
// Dirty the output params
m_cColumns = 99;
m_pStringsBuffer= INVALID(WCHAR*);
// Run testing interface, validate params
if (CHECK(hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, NULL,
&m_pStringsBuffer),E_INVALIDARG))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(3)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: pStringsBuffer is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_3()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
IID iid = IID_IRowset;
// Initialize the variation
INIT;
// SetText on command
if (FAILED(SetCommandText(m_pIMalloc, m_pICommand, m_pTable,
NULL, eSELECT, SELECT_COLLISTFROMTBL, NULL)))
goto CLEANUP;
if (!CHECK(hr=m_pICommand->Execute(NULL, iid, NULL, &m_cRowsAffected,
(IUnknown **) &m_pIRowset),S_OK))
goto CLEANUP;
if (!m_pIRowset)
goto CLEANUP;
// Release the ColumnsInfo Pointer
SAFE_RELEASE(m_pIColumnsInfo);
if (FAILED(m_pIRowset->QueryInterface(IID_IColumnsInfo,
(void **)&m_pIColumnsInfo)))
goto CLEANUP;
// Dirty the output params
m_cColumns = 99;
m_rgInfo = INVALID(DBCOLUMNINFO*);
// run testing interface, validate params
if (CHECK(hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
NULL),E_INVALIDARG))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(4)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText is Set and Executed
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_4()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
// Initialize the variation
INIT;
if (CHECK(hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_ALLFROMTBL, NULL, NEITHER, 0),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(5)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText is Set, Prepared, Unprepared, and Executed
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_5()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
// Initialize the variation
INIT;
if (CHECK(hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_ALLFROMTBL, NULL, BOTH, 0),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(6)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText is Set, Prepared, and Executed
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_6()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
// Initialize the variation
INIT;
if (CHECK(hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_ALLFROMTBL, NULL, PREPARE, 1),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(7)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText that includes duplicate columns
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_7()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
// Initialize the variation
INIT;
if (CHECK(hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_DUPLICATECOLUMNS, NULL, NEITHER, 1),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(8)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText is Set, then change the Text
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_8()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
// Initialize the variation
INIT;
if (!CHECK(hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_DUPLICATECOLUMNS, NULL, NEITHER, 1),S_OK))
goto CLEANUP;
SAFE_RELEASE(m_pIRowset);
SAFE_RELEASE(m_pIColumnsInfo);
FreeColumnInfo(&m_cColumns, &m_rgInfo, &m_pStringsBuffer);
PROVIDER_FREE(m_prgOrdTbl1);
m_cOrdTbl1 = 0;
// SetText on Command
if (CHECK(hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_REVCOLLIST, NULL, PREPARE, 1),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
if (CHECK(hr,S_OK))
fResult = TEST_PASS;
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(9)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText contains a count(*)
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_9()
{
BOOL fResult = TEST_FAIL;
// Initialize the variation
INIT;
TEST2C_(m_hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_COUNT, NULL, NEITHER, 1),S_OK,DB_E_NOTSUPPORTED);
//Skip variation if query is not supported.
if(m_hr == DB_E_NOTSUPPORTED)
{
fResult = TEST_SKIPPED;
goto CLEANUP;
}
// Validate the columns
CheckEachColumn(m_hr,0,SELECT_COUNT);
fResult = TEST_PASS;
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(10)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText contains different column names
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_10()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
// Initialize the variation
INIT;
if (CHECK(hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_CHANGECOLNAME, NULL, NEITHER, 1),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr,0,SELECT_CHANGECOLNAME);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(11)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText contains a select from an Empty Rowset
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_11()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
// Initialize the variation
INIT;
TEST2C_(hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_EMPTYROWSET, NULL, NEITHER, 1),S_OK,DB_E_NOTSUPPORTED);
//Skip variation if query is not supported.
if (hr == DB_E_NOTSUPPORTED)
{
odtLog<<L"Statement is not supported" <<ENDL;
fResult = TEST_SKIPPED;
goto CLEANUP;
}
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(12)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Base table contains no rows
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_12()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
ULONG count = 0;
// Initialize the variation
INIT;
// Check to see if the DSO is ReadOnly
if(!g_fReadOnlyProvider && m_pTable->GetSQLSupport() != DBPROPVAL_SQL_NONE)
{
// Delete all rows in the table.
if(!CHECK(m_pTable->Delete(),S_OK))
goto CLEANUP;
}
else
{
// Drop the table and create an empty one
if(!CHECK(m_pTable->DropTable(),S_OK))
goto CLEANUP;
if(!SUCCEEDED(m_pTable->CreateTable(0,1,NULL,PRIMARY,TRUE)))
goto CLEANUP;
}
if(CHECK(hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
for(count=0;count<10;count++)
m_pTable->Insert();
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(13)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_IRowsetLocate on a Select Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_13()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if (!SupportedProperty(DBPROP_IRowsetLocate, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"IRowsetLocate is not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
if (CHECK(hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER, 1, DBPROP_IRowsetLocate),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr, DBPROP_IRowsetLocate);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(14)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_BOOKMARKS on a Select Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_14()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if (!SupportedProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"Bookmarks are not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
if (CHECK(hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER, 1, DBPROP_BOOKMARKS),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr, DBPROP_BOOKMARKS);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(15)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_DEFERRED on a Select Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_15()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if (!SupportedProperty(DBPROP_DEFERRED, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"Deferred is not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
if (CHECK(hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER, 1, DBPROP_DEFERRED),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr, DBPROP_DEFERRED);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(16)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_CACHEDEFERRED on a Select Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_16()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if (!SupportedProperty(DBPROP_CACHEDEFERRED, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"Cache Deferred is not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
if (CHECK(hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER, 1, DBPROP_CACHEDEFERRED),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr, DBPROP_CACHEDEFERRED);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(17)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_MAYWRITECOLUMN on a Select Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_17()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
if (!SupportedProperty(DBPROP_MAYWRITECOLUMN, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"May Write Column is not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
if(CHECK(hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER, 1, DBPROP_MAYWRITECOLUMN),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr, DBPROP_MAYWRITECOLUMN);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(18)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText contains a select from view
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_18()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
//If the provider is read only, skip the variation.
if(g_fReadOnlyProvider || m_pTable->GetSQLSupport() == DBPROPVAL_SQL_NONE)
{
odtLog << L"Provider is ReadOnly." << ENDL;
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_REVCOLLISTFROMVIEW, NULL, NEITHER, 1);
// Check to see if the create view failed
if (FAILED(hr))
{
odtLog<<L"Create view not supported" <<ENDL;
fResult = TEST_PASS;
}
else
{
// Check to see if everything worked
if(CHECK(hr, S_OK))
fResult = TEST_PASS;
}
// Validate the columns
CheckEachColumn(hr);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(19)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText contains a LEFT OUTER JOIN
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_19()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
// Initialize the variation
INIT;
hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_LEFTOUTERJOIN, NULL, PREPARE);
// Check to see if the left outer joins work
if (FAILED(hr))
{
odtLog<<L"Left Outer Joins not supported" <<ENDL;
fResult = TEST_PASS;
}
else
{
// Check to see if everything worked
if(CHECK(hr, S_OK))
fResult = TEST_PASS;
}
// Validate the columns
CheckEachColumn(hr, 0, SELECT_LEFTOUTERJOIN);
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(20)
//*-----------------------------------------------------------------------
// @mfunc S_OK: CommandText contains a RIGHT OUTER JOIN
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_ExecuteRowset::Variation_20()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
// Initialize the variation
INIT;
hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_RIGHTOUTERJOIN, NULL, PREPARE);
// Check to see if the right outer joins work
if (FAILED(hr))
{
odtLog<<L"Right Outer Joins not supported" <<ENDL;
fResult = TEST_PASS;
}
else
{
// Check to see if everything worked
if(CHECK(hr, S_OK))
fResult = TEST_PASS;
}
// Validate the columns
CheckEachColumn(hr, 0, SELECT_RIGHTOUTERJOIN);
FREE;
return fResult;
}
// }}
// {{ TCW_TERMINATE_METHOD
//--------------------------------------------------------------------
// @mfunc TestCase Termination Routine
//
// @rdesc TRUE or FALSE
//
BOOL GetColInfo_ExecuteRowset::Terminate()
{
// {{ TCW_TERM_BASECLASS_CHECK2
return(IColInfo::Terminate());
} // }}
// }}
// }}
// {{ TCW_TC_PROTOTYPE(GetColInfo_OpenRowset)
//*-----------------------------------------------------------------------
//| Test Case: GetColInfo_OpenRowset - IColumnsInfo on a rowset object
//| Created: 09/20/96
//| Updated: 04/25/98
//*-----------------------------------------------------------------------
//--------------------------------------------------------------------
// @mfunc TestCase Initialization Routine
//
// @rdesc TRUE or FALSE
//
BOOL GetColInfo_OpenRowset::Init()
{
// Initialize for IColumnsInfo::GetColumnInfo
m_Method = GETCOLINFO;
// {{ TCW_INIT_BASECLASS_CHECK
return IColInfo::Init(ROWSET_INTERFACE);
// }}
}
// {{ TCW_VAR_PROTOTYPE(1)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: cColumns is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_OpenRowset::Variation_1()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
IID iid = IID_IRowset;
// Initialize the variation
INIT;
if (FAILED(hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset)))
goto CLEANUP;
if (!m_pIRowset)
goto CLEANUP;
if (FAILED(m_pIRowset->QueryInterface(IID_IColumnsInfo,
(void **)&m_pIColumnsInfo)))
goto CLEANUP;
// Dirty the output params
m_rgInfo = INVALID(DBCOLUMNINFO*);
m_pStringsBuffer= INVALID(WCHAR*);
// Run testing interface, validate params
if (CHECK(hr=m_pIColumnsInfo->GetColumnInfo(NULL, &m_rgInfo,
&m_pStringsBuffer), E_INVALIDARG))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(2)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: rgInfo is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_OpenRowset::Variation_2()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
IID iid = IID_IRowset;
// Initialize the variation
INIT;
if (FAILED(hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset)))
goto CLEANUP;
if (!m_pIRowset)
goto CLEANUP;
if (FAILED(m_pIRowset->QueryInterface(IID_IColumnsInfo,
(void **)&m_pIColumnsInfo)))
goto CLEANUP;
// Dirty the output params
m_cColumns = 99;
m_pStringsBuffer= INVALID(WCHAR*);
// Run testing interface, validate params
if (CHECK(hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, NULL,
&m_pStringsBuffer),E_INVALIDARG))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(3)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: pStringsBuffer is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_OpenRowset::Variation_3()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
IID iid = IID_IRowset;
// Initialize the variation
INIT;
if (FAILED(hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset)))
goto CLEANUP;
if (!m_pIRowset)
goto CLEANUP;
if (FAILED(m_pIRowset->QueryInterface(IID_IColumnsInfo,
(void **)&m_pIColumnsInfo)))
goto CLEANUP;
// Dirty the output params
m_cColumns = 99;
m_rgInfo = INVALID(DBCOLUMNINFO*);
// run testing interface, validate params
if (CHECK(hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
NULL),E_INVALIDARG))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(4)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Basic OpenRowset
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_OpenRowset::Variation_4()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
IID iid = IID_IRowset;
// Initialize the variation
INIT;
if (FAILED(hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset)))
goto CLEANUP;
if (!m_pIRowset)
goto CLEANUP;
if (FAILED(m_pIRowset->QueryInterface(IID_IColumnsInfo,
(void **)&m_pIColumnsInfo)))
goto CLEANUP;
// run testing interface, validate params
if (CHECK(hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(5)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Base table contains no rows
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_OpenRowset::Variation_5()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
ULONG count = 0;
IID iid = IID_IRowset;
// Initialize the variation
INIT;
// Check to see if the DSO is ReadOnly
if(!g_fReadOnlyProvider && m_pTable->GetSQLSupport() != DBPROPVAL_SQL_NONE)
{
// Delete all rows in the table.
if(!CHECK(m_pTable->Delete(),S_OK))
goto CLEANUP;
}
else
{
// Drop the table and create an empty one
if(!CHECK(m_pTable->DropTable(),S_OK))
goto CLEANUP;
if(!SUCCEEDED(m_pTable->CreateTable(0,1,NULL,PRIMARY,TRUE)))
goto CLEANUP;
}
if (FAILED(hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset)))
goto CLEANUP;
if (!m_pIRowset)
goto CLEANUP;
if (FAILED(m_pIRowset->QueryInterface(IID_IColumnsInfo,
(void **)&m_pIColumnsInfo)))
goto CLEANUP;
// run testing interface, validate params
if (CHECK(hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr);
for(count=0;count<10;count++)
m_pTable->Insert();
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(6)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_IRowsetLocate on a Select Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_OpenRowset::Variation_6()
{
HRESULT hr = E_FAIL;
HRESULT Exphr = S_OK;
BOOL fResult = TEST_FAIL;
IID iid = IID_IRowset;
if (!SupportedProperty(DBPROP_IRowsetLocate, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"IRowsetLocate is not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
// Set Property
SetRowsetProperties(DBPROPSET_ROWSET,DBPROP_IRowsetLocate);
if (FAILED(hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset)))
{
if(CHECK(DB_E_ERRORSOCCURRED, hr) && (!m_pIRowset) && (m_rgPropSets->rgProperties->dwStatus == DBPROPSTATUS_NOTSETTABLE))
fResult = TEST_PASS;
goto CLEANUP;
}
if (!m_pIRowset)
goto CLEANUP;
if (FAILED(m_pIRowset->QueryInterface(IID_IColumnsInfo,
(void **)&m_pIColumnsInfo)))
goto CLEANUP;
// run testing interface, validate params
if (CHECK(hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr, DBPROP_IRowsetLocate);
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(7)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_BOOKMARKS on a Select Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_OpenRowset::Variation_7()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
IID iid = IID_IRowset;
if (!SupportedProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"Bookmarks are not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
// Set Property
SetRowsetProperties(DBPROPSET_ROWSET,DBPROP_BOOKMARKS);
if (FAILED(hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset)))
{
if(CHECK(DB_E_ERRORSOCCURRED, hr) && (!m_pIRowset) && (m_rgPropSets->rgProperties->dwStatus == DBPROPSTATUS_NOTSETTABLE))
fResult = TEST_PASS;
goto CLEANUP;
}
if (!m_pIRowset)
goto CLEANUP;
if (FAILED(m_pIRowset->QueryInterface(IID_IColumnsInfo,
(void **)&m_pIColumnsInfo)))
goto CLEANUP;
// run testing interface, validate params
if (CHECK(hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr, DBPROP_BOOKMARKS);
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(8)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_DEFERRED on a Select Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_OpenRowset::Variation_8()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
IID iid = IID_IRowset;
if (!SupportedProperty(DBPROP_DEFERRED, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"Deferred is not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
// Set Property
SetRowsetProperties(DBPROPSET_ROWSET,DBPROP_DEFERRED);
if (FAILED(hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset)))
{
if(CHECK(DB_E_ERRORSOCCURRED, hr) && (!m_pIRowset) && (m_rgPropSets->rgProperties->dwStatus == DBPROPSTATUS_NOTSETTABLE))
fResult = TEST_PASS;
goto CLEANUP;
}
if (!m_pIRowset)
goto CLEANUP;
if (FAILED(m_pIRowset->QueryInterface(IID_IColumnsInfo,
(void **)&m_pIColumnsInfo)))
goto CLEANUP;
// run testing interface, validate params
if (CHECK(hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr, DBPROP_DEFERRED);
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(9)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_CACHEDEFERRED on a Select Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_OpenRowset::Variation_9()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
IID iid = IID_IRowset;
if (!SupportedProperty(DBPROP_CACHEDEFERRED, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"Cache Deferred is not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
// Set Property
SetRowsetProperties(DBPROPSET_ROWSET,DBPROP_CACHEDEFERRED);
if (FAILED(hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset)))
{
if(CHECK(DB_E_ERRORSOCCURRED, hr) && (!m_pIRowset) && (m_rgPropSets->rgProperties->dwStatus == DBPROPSTATUS_NOTSETTABLE))
fResult = TEST_PASS;
goto CLEANUP;
}
if (!m_pIRowset)
goto CLEANUP;
if (FAILED(m_pIRowset->QueryInterface(IID_IColumnsInfo,
(void **)&m_pIColumnsInfo)))
goto CLEANUP;
// run testing interface, validate params
if (CHECK(hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr, DBPROP_DEFERRED);
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_VAR_PROTOTYPE(10)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_MAYWRITECOLUMN on a Select Statement
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfo_OpenRowset::Variation_10()
{
HRESULT hr = E_FAIL;
BOOL fResult = TEST_FAIL;
IID iid = IID_IRowset;
if (!SupportedProperty(DBPROP_MAYWRITECOLUMN, DBPROPSET_ROWSET, m_pIDBInitialize))
{
odtLog << L"May Write Column is not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
// Set Property
SetRowsetProperties(DBPROPSET_ROWSET,DBPROP_MAYWRITECOLUMN);
if (FAILED(hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset)))
{
if(CHECK(DB_E_ERRORSOCCURRED, hr) && (!m_pIRowset) && (m_rgPropSets->rgProperties->dwStatus == DBPROPSTATUS_NOTSETTABLE))
fResult = TEST_PASS;
goto CLEANUP;
}
if (!m_pIRowset)
goto CLEANUP;
if (FAILED(m_pIRowset->QueryInterface(IID_IColumnsInfo,
(void **)&m_pIColumnsInfo)))
goto CLEANUP;
// run testing interface, validate params
if (CHECK(hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK))
fResult = TEST_PASS;
// Validate the columns
CheckEachColumn(hr, DBPROP_MAYWRITECOLUMN);
CLEANUP:
FREE;
return fResult;
}
// }}
// {{ TCW_TERMINATE_METHOD
//--------------------------------------------------------------------
// @mfunc TestCase Termination Routine
//
// @rdesc TRUE or FALSE
//
BOOL GetColInfo_OpenRowset::Terminate()
{
// {{ TCW_TERM_BASECLASS_CHECK2
return(IColInfo::Terminate());
} // }}
// }}
// }}
// {{ TCW_TC_PROTOTYPE(GetColInfoRow_Rowset)
//*-----------------------------------------------------------------------
//| Test Case: GetColInfoRow_Rowset - GetColumnInfo on a Row object
//| Created: 10/12/98
//*-----------------------------------------------------------------------
//*-----------------------------------------------------------------------
// @mfunc TestCase Initialization Routine
//
// @rdesc TRUE or FALSE
//
BOOL GetColInfoRow_Rowset::Init()
{
EINTERFACE eIntf = ROWSET_INTERFACE;
if(m_eTestCase == TC_Cmd)
eIntf = COMMAND_INTERFACE;
// {{ TCW_INIT_BASECLASS_CHECK
if(IColInfo::Init(eIntf))
// }}
{
m_Method = GETCOLINFO;
switch(m_eTestCase)
{
case TC_Rowset:
return GetRowFromRowset(FALSE);
case TC_Cmd:
return GetRowFromCommand(FALSE);
case TC_OpenRW:
return GetRowFromOpenRW(FALSE);
case TC_Bind:
return GetRowFromBind(FALSE);
case TC_IColInfo2:
return GetRowFromRowset(TRUE);
default:
ASSERT(!L"Unhandled Type...");
}
}
return FALSE;
}
// {{ TCW_VAR_PROTOTYPE(1)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Basic
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfoRow_Rowset::Variation_1()
{
TBEGIN
TESTC_(m_hr=CallMethodOnRowObj(FALSE), S_OK)
m_cColumns = m_cOrdTbl1 + !(m_rgInfo2[0].iOrdinal) ;
m_rgInfo = m_rgInfo2;
CheckEachColumn(m_hr);
TESTC(m_cColumns2 >= m_cColumns)
TESTC(CheckRowSpecificColumns(m_cColumns2-m_cColumns,
&(m_rgInfo2[m_cColumns]), m_rgInfo2[m_cColumns-1].iOrdinal+1))
CLEANUP:
CLEAR
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(2)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: pcColumns is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfoRow_Rowset::Variation_2()
{
TBEGIN
if(m_pIColumnsInfo)
TESTC_(m_pIColumnsInfo->GetColumnInfo(NULL,&m_rgInfo2,&m_pStringsBuffer), E_INVALIDARG)
else
TESTC_(m_pIColumnsInfo2->GetColumnInfo(NULL,&m_rgInfo2,&m_pStringsBuffer), E_INVALIDARG)
CLEANUP:
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(3)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: prgInfo is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfoRow_Rowset::Variation_3()
{
TBEGIN
if(m_pIColumnsInfo)
TESTC_(m_pIColumnsInfo->GetColumnInfo(&m_cColumns2,NULL,&m_pStringsBuffer), E_INVALIDARG)
else
TESTC_(m_pIColumnsInfo2->GetColumnInfo(&m_cColumns2,NULL,&m_pStringsBuffer), E_INVALIDARG)
CLEANUP:
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(4)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: ppStringsBuffer is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetColInfoRow_Rowset::Variation_4()
{
TBEGIN
if(m_pIColumnsInfo)
TESTC_(m_pIColumnsInfo->GetColumnInfo(&m_cColumns2,&m_rgInfo2,NULL), E_INVALIDARG)
else
TESTC_(m_pIColumnsInfo2->GetColumnInfo(&m_cColumns2,&m_rgInfo2,NULL), E_INVALIDARG)
CLEANUP:
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_TERMINATE_METHOD
//*-----------------------------------------------------------------------
// @mfunc TestCase Termination Routine
//
// @rdesc TEST_PASS or TEST_FAIL
//
BOOL GetColInfoRow_Rowset::Terminate()
{
SAFE_RELEASE(m_pIUnknown);
FREE;
// {{ TCW_TERM_BASECLASS_CHECK2
return(IColInfo::Terminate());
} // }}
// }} TCW_TERMINATE_METHOD_END
// }} TCW_TC_PROTOTYPE_END
// {{ TCW_TC_PROTOTYPE(GetResColInfoRow_Rowset)
//*-----------------------------------------------------------------------
//| Test Case: GetResColInfoRow_Rowset - GetRestrictedColumnInfo on a Row object
//| Created: 10/12/98
//*-----------------------------------------------------------------------
//*-----------------------------------------------------------------------
// @mfunc TestCase Initialization Routine
//
// @rdesc TRUE or FALSE
//
BOOL GetResColInfoRow_Rowset::Init()
{
EINTERFACE eIntf = ROWSET_INTERFACE;
if(m_eTestCase == TC_Cmd)
eIntf = COMMAND_INTERFACE;
// {{ TCW_INIT_BASECLASS_CHECK
if(IColInfo::Init(eIntf))
// }}
{
m_Method = GETRESCOLINFO;
switch(m_eTestCase)
{
case TC_Rowset:
return GetRowFromRowset(TRUE);
case TC_Cmd:
return GetRowFromCommand(TRUE);
case TC_OpenRW:
return GetRowFromOpenRW(TRUE);
case TC_Bind:
return GetRowFromBind(TRUE);
default:
ASSERT(!L"Unhandled Type...");
}
}
return FALSE;
}
// {{ TCW_VAR_PROTOTYPE(1)
//*-----------------------------------------------------------------------
// @mfunc S_OK: No Masks
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_1()
{
TBEGIN
//NO MASKS.
m_cMasks = 0;
m_rgMasks = NULL;
TESTC_(m_hr=CallMethodOnRowObj(TRUE), S_OK)
m_cColumns = m_cOrdTbl1 + !(m_rgInfo2[0].iOrdinal) ;
m_rgInfo = m_rgInfo2;
CheckEachColumn(m_hr);
TESTC(m_cColumns2 >= m_cColumns)
TESTC(CheckRowSpecificColumns(m_cColumns2-m_cColumns,
&(m_rgInfo2[m_cColumns]), m_rgInfo2[m_cColumns-1].iOrdinal+1))
CLEANUP:
CLEAR
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(2)
//*-----------------------------------------------------------------------
// @mfunc S_OK: 1 name mask
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_2()
{
TBEGIN
//ONE NAME MASK
m_cMasks = 1;
SAFE_ALLOC(m_rgMasks, DBID, 1);
m_rgMasks[0].eKind = DBKIND_NAME;
m_rgMasks[0].uName.pwszName = L"C";
TEST2C_(m_hr=CallMethodOnRowObj(TRUE), S_OK, DB_E_NOCOLUMN)
if(S_OK == m_hr)
TESTC(VerifyRestrictions());
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(3)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Multiple name masks
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_3()
{
TBEGIN
DBORDINAL iMask;
DBORDINAL cMasks = 8;
//6 NAME MASKS
m_cMasks = cMasks;
SAFE_ALLOC(m_rgMasks, DBID, cMasks);
for(iMask=0; iMask<cMasks; iMask++)
m_rgMasks[iMask].eKind = DBKIND_NAME;
m_rgMasks[0].uName.pwszName = L"C";
m_rgMasks[1].uName.pwszName = L"c";
m_rgMasks[2].uName.pwszName = L"R";
m_rgMasks[3].uName.pwszName = L"r";
m_rgMasks[4].uName.pwszName = L"S";
m_rgMasks[5].uName.pwszName = L"s";
m_rgMasks[6].uName.pwszName = L"D";
m_rgMasks[7].uName.pwszName = L"h";
TEST2C_(m_hr=CallMethodOnRowObj(TRUE), S_OK, DB_E_NOCOLUMN)
if(S_OK == m_hr)
TESTC(VerifyRestrictions());
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(4)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Existing Column as mask
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_4()
{
TBEGIN
DBORDINAL cCol = 0;
TESTC_(m_hr=CallMethodOnRowObj(TRUE, GETCOLINFO), S_OK)
TESTC(m_cColumns2>0 && m_rgInfo2)
if(m_cColumns2>1)
cCol = 1;
//ONE NAME MASK
m_cMasks = 1;
SAFE_ALLOC(m_rgMasks, DBID, 1);
TESTC_(DuplicateDBID(m_rgInfo2[cCol].columnid, m_rgMasks), S_OK)
FreeColumnInfo(&m_cColumns2,&m_rgInfo2,&m_pStringsBuffer);
TESTC_(m_hr=CallMethodOnRowObj(TRUE), S_OK)
TESTC(VerifyRestrictions());
CLEANUP:
ReleaseDBID(m_rgMasks, FALSE);
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(5)
//*-----------------------------------------------------------------------
// @mfunc S_OK: GUID_PROPID mask
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_5()
{
TBEGIN
ULONG_PTR ulDocSrc=0;
BOOL bDocSrc=FALSE;
//Get the value of DBPROP_DATASOURCE_TYPE property.
if(GetProperty(DBPROP_DATASOURCE_TYPE, DBPROPSET_DATASOURCEINFO,
m_pIDBInitialize, &ulDocSrc))
{
if((ulDocSrc & DBPROPVAL_DST_DOCSOURCE) == DBPROPVAL_DST_DOCSOURCE)
bDocSrc = TRUE;
}
//6 GUID MASKS
m_cMasks = 6;
SAFE_ALLOC(m_rgMasks, DBID, 6);
m_rgMasks[0] = DBROWCOL_PARSENAME;
m_rgMasks[1] = DBROWCOL_PARENTNAME;
m_rgMasks[2] = DBROWCOL_ABSOLUTEPARSENAME;
m_rgMasks[3] = DBROWCOL_ISHIDDEN;
m_rgMasks[4] = DBROWCOL_ISREADONLY;
m_rgMasks[5] = DBROWCOL_CONTENTTYPE;
TEST2C_(m_hr=CallMethodOnRowObj(TRUE), S_OK, DB_E_NOCOLUMN)
if(S_OK == m_hr)
{
TESTC(VerifyRestrictions());
//Since the resource rowset columns were returned,
//verify the value of DBPROP_DATASOURCE_TYPE property.
TESTC(bDocSrc);
odtLog<<L"INFO: This provider supports direct URL binding and is a document source provider.\n";
}
else
{
TESTC(!bDocSrc);
odtLog<<L"INFO: This provider is NOT a document source provider.\n";
}
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(6)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Guid_Name mask
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_6()
{
TBEGIN
m_cMasks = 1;
SAFE_ALLOC(m_rgMasks, DBID, 1);
m_rgMasks[0].eKind = DBKIND_GUID_NAME;
m_rgMasks[0].uGuid.guid = guidMod;
m_rgMasks[0].uName.pwszName = L"C";
TEST2C_(m_hr=CallMethodOnRowObj(TRUE), S_OK, DB_E_NOCOLUMN)
if(S_OK == m_hr)
TESTC(VerifyRestrictions());
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(7)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Pguid_Name mask
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_7()
{
TBEGIN
m_cMasks = 1;
SAFE_ALLOC(m_rgMasks, DBID, 1);
m_rgMasks[0].eKind = DBKIND_PGUID_NAME;
m_rgMasks[0].uGuid.pguid = &guidMod;
m_rgMasks[0].uName.pwszName = L"C";
TEST2C_(m_hr=CallMethodOnRowObj(TRUE), S_OK, DB_E_NOCOLUMN)
if(S_OK == m_hr)
TESTC(VerifyRestrictions());
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(8)
//*-----------------------------------------------------------------------
// @mfunc S_OK: PGuid_Propid mask
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_8()
{
TBEGIN
m_cMasks = 1;
SAFE_ALLOC(m_rgMasks, DBID, 1);
m_rgMasks[0].eKind = DBKIND_PGUID_PROPID;
m_rgMasks[0].uGuid.pguid = &guidMod;
m_rgMasks[0].uName.ulPropid = 2;
TEST2C_(m_hr=CallMethodOnRowObj(TRUE), S_OK, DB_E_NOCOLUMN)
if(S_OK == m_hr)
TESTC(VerifyRestrictions());
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(9)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Propid mask
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_9()
{
TBEGIN
m_cMasks = 1;
SAFE_ALLOC(m_rgMasks, DBID, 1);
m_rgMasks[0].eKind = DBKIND_PROPID;
m_rgMasks[0].uName.ulPropid = 2;
TEST2C_(m_hr=CallMethodOnRowObj(TRUE), S_OK, DB_E_NOCOLUMN)
if(S_OK == m_hr)
TESTC(VerifyRestrictions());
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(10)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Guid mask
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_10()
{
TBEGIN
m_cMasks = 1;
SAFE_ALLOC(m_rgMasks, DBID, 1);
m_rgMasks[0].eKind = DBKIND_GUID;
m_rgMasks[0].uGuid.guid = guidMod;
TEST2C_(m_hr=CallMethodOnRowObj(TRUE), S_OK, DB_E_NOCOLUMN)
if(S_OK == m_hr)
TESTC(VerifyRestrictions());
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(11)
//*-----------------------------------------------------------------------
// @mfunc S_OK: prgColumnIDs=NULL but prgColumnInfo != NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_11()
{
TBEGIN
DBORDINAL cCol = 0;
TESTC_(m_hr=CallMethodOnRowObj(TRUE, GETCOLINFO), S_OK)
TESTC(m_cColumns2>0 && m_rgInfo2)
if(m_cColumns2>1)
cCol = 1;
//ONE NAME MASK
m_cMasks = 1;
SAFE_ALLOC(m_rgMasks, DBID, 1);
TESTC_(DuplicateDBID(m_rgInfo2[cCol].columnid, m_rgMasks), S_OK)
FreeColumnInfo(&m_cColumns2,&m_rgInfo2,&m_pStringsBuffer);
TESTC_(m_hr = m_pIColumnsInfo2->GetRestrictedColumnInfo(m_cMasks,
m_rgMasks, 0, &m_cColumns2,NULL,&m_rgInfo2,&m_pStringsBuffer), S_OK)
TESTC(CheckParams(m_hr, GETRESCOLINFO))
TESTC(VerifyRestrictions());
CLEANUP:
ReleaseDBID(m_rgMasks, FALSE);
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(12)
//*-----------------------------------------------------------------------
// @mfunc S_OK: prgColumnInfo=NULL but prgColumnIDs != NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_12()
{
TBEGIN
DBORDINAL cCol = 0;
TESTC_(m_hr=CallMethodOnRowObj(TRUE, GETCOLINFO), S_OK)
TESTC(m_cColumns2>0 && m_rgInfo2)
if(m_cColumns2>1)
cCol = 1;
//ONE NAME MASK
m_cMasks = 1;
SAFE_ALLOC(m_rgMasks, DBID, 1);
TESTC_(DuplicateDBID(m_rgInfo2[cCol].columnid, m_rgMasks), S_OK)
FreeColumnInfo(&m_cColumns2,&m_rgInfo2,&m_pStringsBuffer);
TESTC_(m_hr = m_pIColumnsInfo2->GetRestrictedColumnInfo(m_cMasks,
m_rgMasks, 0, &m_cColumns2,&m_rgColumnIDs2,NULL,&m_pStringsBuffer), S_OK)
TESTC(CheckParams(m_hr, GETRESCOLINFO))
TESTC(VerifyRestrictions());
CLEANUP:
ReleaseDBID(m_rgMasks, FALSE);
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(13)
//*-----------------------------------------------------------------------
// @mfunc DB_E_BADCOLUMNID: invalid DBID for rgColumnIDMasks
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_13()
{
TBEGIN
//ONE NAME MASK
m_cMasks = 1;
SAFE_ALLOC(m_rgMasks, DBID, 1);
m_rgMasks[0].eKind = DBKIND_GUID + 100; //Some large number.
m_rgMasks[0].uName.pwszName = L"n";
TESTC_(m_hr=CallMethodOnRowObj(TRUE), DB_E_BADCOLUMNID)
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(14)
//*-----------------------------------------------------------------------
// @mfunc DB_E_NOCOLUMN: Non-existent name for mask
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_14()
{
TBEGIN
DBORDINAL iMask;
//6 NAME MASKS
m_cMasks = 6;
SAFE_ALLOC(m_rgMasks, DBID, 6);
for(iMask=0; iMask<6; iMask++)
m_rgMasks[iMask].eKind = DBKIND_NAME;
m_rgMasks[0].uName.pwszName = L"NonExistentColumn1";
m_rgMasks[1].uName.pwszName = L"NonExistentColumn2";
m_rgMasks[2].uName.pwszName = L"NonExistentColumn3";
m_rgMasks[3].uName.pwszName = L"NonExistentColumn4";
m_rgMasks[4].uName.pwszName = L"NonExistentColumn5";
m_rgMasks[5].uName.pwszName = L"NonExistentColumn6";
TESTC_(m_hr=CallMethodOnRowObj(TRUE), DB_E_NOCOLUMN)
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(15)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: cColumnIDMasks=1 and rgColumnIDMasks=NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_15()
{
TBEGIN
TESTC_(m_pIColumnsInfo2->GetRestrictedColumnInfo(1, NULL, 0, &m_cColumns2,&m_rgColumnIDs2,&m_rgInfo2,&m_pStringsBuffer), E_INVALIDARG)
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(16)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: pcColumns=NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_16()
{
TBEGIN
//ONE NAME MASK
m_cMasks = 1;
SAFE_ALLOC(m_rgMasks, DBID, 1);
m_rgMasks[0].eKind = DBKIND_NAME;
m_rgMasks[0].uName.pwszName = L"n";
TESTC_(m_pIColumnsInfo2->GetRestrictedColumnInfo(m_cMasks, m_rgMasks, 0, NULL,&m_rgColumnIDs2,&m_rgInfo2,&m_pStringsBuffer), E_INVALIDARG)
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(17)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: ppStringsBuffer=NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_17()
{
TBEGIN
//ONE NAME MASK
m_cMasks = 1;
SAFE_ALLOC(m_rgMasks, DBID, 1);
m_rgMasks[0].eKind = DBKIND_NAME;
m_rgMasks[0].uName.pwszName = L"n";
TESTC_(m_pIColumnsInfo2->GetRestrictedColumnInfo(m_cMasks, m_rgMasks, 0, &m_cColumns2,&m_rgColumnIDs2,&m_rgInfo2,NULL), E_INVALIDARG)
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(18)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: prgColumnIDs=NULL and prgColumnInfo=NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_18()
{
TBEGIN
//ONE NAME MASK
m_cMasks = 1;
SAFE_ALLOC(m_rgMasks, DBID, 1);
m_rgMasks[0].eKind = DBKIND_NAME;
m_rgMasks[0].uName.pwszName = L"n";
TESTC_(m_pIColumnsInfo2->GetRestrictedColumnInfo(m_cMasks, m_rgMasks,
0, &m_cColumns2,NULL,NULL,&m_pStringsBuffer), E_INVALIDARG)
TESTC_(m_pIColumnsInfo2->GetRestrictedColumnInfo(0, m_rgMasks, 0,
&m_cColumns2,NULL,NULL,NULL), E_INVALIDARG)
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(19)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: ppStringsBuffer=NULL & either prgColumnIDs or prgColumnInfo = NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int GetResColInfoRow_Rowset::Variation_19()
{
TBEGIN
//ONE NAME MASK
m_cMasks = 1;
SAFE_ALLOC(m_rgMasks, DBID, 1);
m_rgMasks[0].eKind = DBKIND_NAME;
m_rgMasks[0].uName.pwszName = L"n";
CHECK(m_pIColumnsInfo2->GetRestrictedColumnInfo(m_cMasks, m_rgMasks,
0, &m_cColumns2,NULL, &m_rgInfo2, NULL), E_INVALIDARG);
CHECK(m_pIColumnsInfo2->GetRestrictedColumnInfo(m_cMasks, m_rgMasks,
0, &m_cColumns2,&m_rgColumnIDs2,NULL,NULL), E_INVALIDARG);
CHECK(m_pIColumnsInfo2->GetRestrictedColumnInfo(0, m_rgMasks,
0, &m_cColumns2,NULL,&m_rgInfo2,NULL), E_INVALIDARG);
CHECK(m_pIColumnsInfo2->GetRestrictedColumnInfo(0, m_rgMasks,
0, &m_cColumns2,&m_rgColumnIDs2,NULL,NULL), E_INVALIDARG);
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_TERMINATE_METHOD
//*-----------------------------------------------------------------------
// @mfunc TestCase Termination Routine
//
// @rdesc TEST_PASS or TEST_FAIL
//
BOOL GetResColInfoRow_Rowset::Terminate()
{
SAFE_RELEASE(m_pIUnknown);
FREE;
// {{ TCW_TERM_BASECLASS_CHECK2
return(IColInfo::Terminate());
} // }}
// }} TCW_TERMINATE_METHOD_END
// }} TCW_TC_PROTOTYPE_END
// {{ TCW_TC_PROTOTYPE(MapColID_Command)
//*-----------------------------------------------------------------------
//| Test Case: MapColID_Command - MapColumnIDs on a command object
//| Created: 09/20/96
//| Updated: 04/25/98
//*-----------------------------------------------------------------------
//--------------------------------------------------------------------
// @mfunc TestCase Initialization Routine
//
// @rdesc TRUE or FALSE
//
BOOL MapColID_Command::Init()
{
// Initialize for IColumnsInfo::MapColumnIDs
m_Method = MAPCOLID;
ULONG_PTR ulOleObj = 0;
if(!GetProperty(DBPROP_OLEOBJECTS, DBPROPSET_DATASOURCEINFO,
GetModInfo()->GetThisTestModule()->m_pIUnknown, &ulOleObj) ||
!(ulOleObj & DBPROPVAL_OO_SINGLETON))
{
if(m_eTestCase == TC_SingSel)
{
odtLog<<L"INFO: Obtaining row objects directly from commands is not supported.\n";
return TEST_SKIPPED;
}
}
// {{ TCW_INIT_BASECLASS_CHECK
return IColInfo::Init(COMMAND_INTERFACE);
// }}
}
// {{ TCW_VAR_PROTOTYPE(1)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: cColumnIDs != 0, range = NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_1()
{
TBEGIN;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, FALSE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),E_INVALIDARG);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(2)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: rgColumns is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_2()
{
TBEGIN;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),E_INVALIDARG);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(3)
//*-----------------------------------------------------------------------
// @mfunc DB_E_NOCOMMAND: CommandText is not Set
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_3()
{
TBEGIN;
DBORDINAL ulIndex = 0;
if(m_eTestCase==TC_SingSel)
goto CLEANUP;
// Initialize the variation
INIT;
// Initialize to Params
m_cColumnIDs = 1;
m_rgColumnIDs = (DBID *) PROVIDER_ALLOC(sizeof(DBID) * m_cColumnIDs);
m_rgColumns = (DBORDINAL *) PROVIDER_ALLOC(sizeof(DBORDINAL) * m_cColumnIDs);
// Check the pointers and memset to invalid signature
TESTC(m_rgColumnIDs != NULL);
TESTC(m_rgColumns != NULL);
for(ulIndex=0; ulIndex < m_cColumnIDs; ulIndex++)
m_rgColumns[ulIndex] = INVALID(DBORDINAL);
TESTC(VerifyInterface(m_pICommand, IID_IColumnsInfo,
COMMAND_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Validate return code
TESTC_(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,m_rgColumnIDs,
m_rgColumns), DB_E_NOCOMMAND);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(4)
//*-----------------------------------------------------------------------
// @mfunc DB_E_NOCOMMAND: CommandText is Set to Empty
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_4()
{
TBEGIN;
DBORDINAL ulIndex = 0;
WCHAR * pSQLSet = NULL;
if(m_eTestCase==TC_SingSel)
goto CLEANUP;
// Initialize the variation
INIT;
// Fillout the Columns
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK);
// SetText on command
TESTC_(SetCommandText(m_pIMalloc, m_pICommand, m_pTable,
NULL, eSQL, SELECT_COLLISTFROMTBL, pSQLSet),S_OK);
// Reset the rgColumns array
for(ulIndex=0; ulIndex < m_cColumnIDs; ulIndex++)
m_rgColumns[ulIndex] = INVALID(DBORDINAL);
TESTC_(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,m_rgColumnIDs,
m_rgColumns), DB_E_NOCOMMAND);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(5)
//*-----------------------------------------------------------------------
// @mfunc DB_E_NOCOMMAND: CommandText is Set to NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_5()
{
TBEGIN;
DBORDINAL ulIndex = 0;
if(m_eTestCase==TC_SingSel)
goto CLEANUP;
// Initialize the variation
INIT;
// Fillout the Columns
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK);
// SetText on command
TESTC_(SetCommandText(m_pIMalloc, m_pICommand, m_pTable,
NULL, eSQL, SELECT_COLLISTFROMTBL, NULL),S_OK);
// Reset the rgColumns array
for(ulIndex=0; ulIndex < m_cColumnIDs; ulIndex++)
m_rgColumns[ulIndex] = INVALID(DBORDINAL);
TESTC_(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,m_rgColumnIDs,
m_rgColumns), DB_E_NOCOMMAND);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(6)
//*-----------------------------------------------------------------------
// @mfunc DB_E_NOTPREPARED/S_OK: CommandText is Set, but not Prepared
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_6()
{
TBEGIN;
HRESULT Exphr = S_OK;
if(m_eTestCase==TC_SingSel)
goto CLEANUP;
// Initialize the variation
INIT;
// Check to see if the Provider supports ICommandPrepare
if( m_ePreparation == SUPPORTED )
Exphr = DB_E_NOTPREPARED;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_REVCOLLIST, NULL, NEITHER, 1), Exphr);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(7)
//*-----------------------------------------------------------------------
// @mfunc DB_E_NOTPREPARED/S_OK: CommandText is Set, Prepared, and Unprepared
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_7()
{
TBEGIN;
HRESULT Exphr = S_OK;
if(m_eTestCase==TC_SingSel)
goto CLEANUP;
// Initialize the variation
INIT;
// Check to see if the Provider supports ICommandPrepare
if( m_ePreparation == SUPPORTED )
Exphr = DB_E_NOTPREPARED;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, BOTH, 1), Exphr);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(8)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: All ColumnIDs are invalid
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_8()
{
TBEGIN;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
// Initialize to Params
m_cColumnIDs = 5;
m_rgColumnIDs = (DBID *) PROVIDER_ALLOC(sizeof(DBID) * m_cColumnIDs);
m_rgColumns = (DBORDINAL *) PROVIDER_ALLOC(sizeof(DBORDINAL) * m_cColumnIDs);
TESTC(m_rgColumnIDs != NULL);
TESTC(m_rgColumns != NULL);
for(ulIndex=0; ulIndex < m_cColumnIDs; ulIndex++)
m_rgColumns[ulIndex] = INVALID(DBORDINAL);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
m_rgColumns[ulIndex] = 55;
m_rgColumnIDs[ulIndex].uGuid.guid = GUID_NULL;
m_rgColumnIDs[ulIndex].eKind = 1000;
m_rgColumnIDs[ulIndex].uName.ulPropid = 1000;
}
TESTC_(m_hr=ExecuteMethod_cmd(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)),DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(9)
//*-----------------------------------------------------------------------
// @mfunc DB_S_ERRORSOCCURRED: One ColumnID is invalid
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_9()
{
TBEGIN;
HRESULT Exphr = S_OK;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)),S_OK);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
if( !ulIndex )
{
// Check to see if there is only one column
Exphr = DB_E_ERRORSOCCURRED;
m_rgColumnIDs[ulIndex].uGuid.guid = GUID_NULL;
m_rgColumnIDs[ulIndex].eKind = 1000;
m_rgColumnIDs[ulIndex].uName.ulPropid = 1000;
continue;
}
// Check to see if there is more than one column
Exphr = DB_S_ERRORSOCCURRED;
}
TESTC_(m_hr=ExecuteMethod_cmd(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)),Exphr);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(10)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Count of ColumnIDs is 0
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_10()
{
TBEGIN;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(FALSE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)),S_OK);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(11)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Valid count and valid range of ColumnIDs
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_11()
{
TBEGIN;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)),S_OK);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(12)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_BOOKMARKS
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_12()
{
TBEGIN;
if( !SupportedProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIDBInitialize) )
{
odtLog << L"Bookmarks are not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE, 1, DBPROP_BOOKMARKS,(m_eTestCase==TC_SingSel)),S_OK);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(13)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Duplicate ColumnIDs
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_13()
{
TBEGIN;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_DUPLICATECOLUMNS, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)),S_OK);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(14)
//*-----------------------------------------------------------------------
// @mfunc S_OK: ColumnIDs in reverse order
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_14()
{
TBEGIN;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_REVCOLLIST, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)),S_OK);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(15)
//*-----------------------------------------------------------------------
// @mfunc S_OK: ColumnIDs from a view
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_15()
{
TBEGIN;
if(m_eTestCase==TC_SingSel)
return TEST_SKIPPED;
//If the provider is read only, skip the variation.
if( g_fReadOnlyProvider || m_pTable->GetSQLSupport() == DBPROPVAL_SQL_NONE )
{
odtLog << L"Provider is ReadOnly." << ENDL;
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_REVCOLLISTFROMVIEW, NULL, PREPARE);
// Check to see if the create view failed
if( FAILED(m_hr) )
odtLog<<L"Create view not supported" <<ENDL;
else {
TESTC_(m_hr, S_OK);
}
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(16)
//*-----------------------------------------------------------------------
// @mfunc S_OK: ColumnIDs from a count(*)
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_16()
{
TBEGIN;
// Initialize the variation
INIT;
TEST2C_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COUNT, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)),S_OK,DB_E_NOTSUPPORTED);
//Skip variation if query is not supported.
TESTC_PROVIDER(m_hr != DB_E_NOTSUPPORTED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(17)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Change the DBKIND in the ColumnIDs
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_17()
{
TBEGIN;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)),S_OK);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
if( (m_rgColumnIDs[ulIndex].eKind == DBKIND_NAME) ||
(m_rgColumnIDs[ulIndex].eKind == DBKIND_GUID_NAME) ||
(m_rgColumnIDs[ulIndex].eKind == DBKIND_PGUID_NAME) )
{
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
m_rgColumnIDs[ulIndex].uName.ulPropid = 1;
}
else
{
m_rgColumnIDs[ulIndex].eKind = DBKIND_NAME;
m_rgColumnIDs[ulIndex].uName.pwszName = L"Bogus";
}
}
TESTC_(m_hr=ExecuteMethod_cmd(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)), DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(18)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Ask for Column 0 with DBKIND_PROPID
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_18()
{
TBEGIN;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)),S_OK);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
m_rgColumnIDs[ulIndex].uName.ulPropid = 0;
}
TESTC_(m_hr=ExecuteMethod_cmd(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)), DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(19)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Switch the DBKIND in the ColumnIDs
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_19()
{
TBEGIN;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)),S_OK);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
switch(m_rgColumnIDs[ulIndex].eKind)
{
case DBKIND_NAME:
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID_NAME;
break;
case DBKIND_GUID_NAME:
case DBKIND_PGUID_NAME:
m_rgColumnIDs[ulIndex].eKind = DBKIND_NAME;
break;
case DBKIND_PROPID:
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID_PROPID;
break;
case DBKIND_GUID_PROPID:
case DBKIND_PGUID_PROPID:
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
break;
case DBKIND_GUID:
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID_PROPID;
break;
default:
assert(FALSE);
}
}
CHECKW(m_hr=ExecuteMethod_cmd(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)), DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr, FALSE));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(20)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Change the GUID in the DBID
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_20()
{
TBEGIN;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)),S_OK);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
switch(m_rgColumnIDs[ulIndex].eKind)
{
case DBKIND_PGUID_NAME:
case DBKIND_PGUID_PROPID:
*m_rgColumnIDs[ulIndex].uGuid.pguid = DBPROPSET_ROWSET;
break;
case DBKIND_NAME:
case DBKIND_PROPID:
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID;
case DBKIND_GUID:
case DBKIND_GUID_NAME:
case DBKIND_GUID_PROPID:
m_rgColumnIDs[ulIndex].uGuid.guid = DBPROPSET_ROWSET;
break;
}
}
TESTC_(m_hr=ExecuteMethod_cmd(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)), DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(21)
//*-----------------------------------------------------------------------
// @mfunc DB_S_ERRORSOCCURRED: ColumnID one greater than the last ordinal
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_21()
{
TBEGIN;
HRESULT Exphr = S_OK;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)),S_OK);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
if( !ulIndex )
{
// Check to see if there is only one column
Exphr = DB_E_ERRORSOCCURRED;
if( m_rgColumnIDs[ulIndex].eKind != DBKIND_PROPID &&
m_rgColumnIDs[ulIndex].eKind != DBKIND_GUID_PROPID &&
m_rgColumnIDs[ulIndex].eKind != DBKIND_PGUID_PROPID )
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
m_rgColumnIDs[ulIndex].uName.ulPropid = ULONG(m_cColumnIDs+2);
continue;
}
// Check to see if there is more than one column
Exphr = DB_S_ERRORSOCCURRED;
}
TESTC_(m_hr=ExecuteMethod_cmd(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)),Exphr);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(22)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Ask for Column 0
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_22()
{
TBEGIN;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel)),S_OK);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
if( m_rgColumnIDs[ulIndex].eKind != DBKIND_PROPID &&
m_rgColumnIDs[ulIndex].eKind != DBKIND_GUID_PROPID &&
m_rgColumnIDs[ulIndex].eKind != DBKIND_PGUID_PROPID )
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
m_rgColumnIDs[ulIndex].uName.ulPropid = 0;
}
m_hr=ExecuteMethod_cmd(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE,1,
0,(m_eTestCase==TC_SingSel));
// May or may not find the bookmark column
if( GetProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pICommand) ) {
TEST2C_(m_hr, DB_E_ERRORSOCCURRED, DB_S_ERRORSOCCURRED);
}
else {
TESTC_(m_hr, DB_E_ERRORSOCCURRED);
}
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(23)
//*-----------------------------------------------------------------------
// @mfunc DB_E_NOTABLE: Call with a Table that doesn't exist
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_Command::Variation_23()
{
TBEGIN;
DBORDINAL ulIndex = 0;
if(m_eTestCase==TC_SingSel)
return TEST_SKIPPED;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK);
// Reset the rgColumns array
for(ulIndex=0; ulIndex < m_cColumnIDs; ulIndex++)
m_rgColumns[ulIndex] = INVALID(DBORDINAL);
TEST3C_(m_hr=ExecuteMethod_cmd(FALSE, FALSE, FALSE, eSELECT,
SELECT_NO_TABLE, NULL, PREPARE), DB_E_NOTABLE, DB_E_ERRORSINCOMMAND,DB_E_NOTSUPPORTED);
//Skip variation if query is not supported.
TESTC_PROVIDER(m_hr != DB_E_NOTSUPPORTED)
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_TERMINATE_METHOD
//--------------------------------------------------------------------
// @mfunc TestCase Termination Routine
//
// @rdesc TRUE or FALSE
//
BOOL MapColID_Command::Terminate()
{
// {{ TCW_TERM_BASECLASS_CHECK2
return(IColInfo::Terminate());
} // }}
// }}
// }}
// {{ TCW_TC_PROTOTYPE(MapColID_ExecuteRowset)
//*-----------------------------------------------------------------------
//| Test Case: MapColID_ExecuteRowset - MapColumnIDs on a rowset
//| Created: 09/20/96
//| Updated: 04/25/98
//*-----------------------------------------------------------------------
//--------------------------------------------------------------------
// @mfunc TestCase Initialization Routine
//
// @rdesc TRUE or FALSE
//
BOOL MapColID_ExecuteRowset::Init()
{
// Initialize for IColumnsInfo::MapColumnIDs
m_Method = MAPCOLID;
// {{ TCW_INIT_BASECLASS_CHECK
return IColInfo::Init(COMMAND_INTERFACE);
// }}
}
// {{ TCW_VAR_PROTOTYPE(1)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: cColumnIDs != 0, range = NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_1()
{
TBEGIN;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_row(TRUE, FALSE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER),E_INVALIDARG);
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(2)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: rgColumns is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_2()
{
TBEGIN;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_row(TRUE, TRUE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER),E_INVALIDARG);
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(3)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: All ColumnIDs are invalid
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_3()
{
TBEGIN;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
// Initialize to Params
m_cColumnIDs = 5;
m_rgColumnIDs = (DBID *) PROVIDER_ALLOC(sizeof(DBID) * m_cColumnIDs);
m_rgColumns = (DBORDINAL *) PROVIDER_ALLOC(sizeof(DBORDINAL) * m_cColumnIDs);
TESTC(m_rgColumnIDs != NULL);
TESTC(m_rgColumns != NULL);
for(ulIndex=0; ulIndex < m_cColumnIDs; ulIndex++)
m_rgColumns[ulIndex] = INVALID(DBORDINAL);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
m_rgColumns[ulIndex] = 55;
m_rgColumnIDs[ulIndex].uGuid.guid = GUID_NULL;
m_rgColumnIDs[ulIndex].eKind = 1000;
m_rgColumnIDs[ulIndex].uName.ulPropid = 1000;
}
TESTC_(m_hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER),DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(4)
//*-----------------------------------------------------------------------
// @mfunc DB_S_ERRORSOCCURRED: One ColumnID is invalid
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_4()
{
TBEGIN;
HRESULT Exphr = S_OK;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK);
// Release the Rowset created
SAFE_RELEASE(m_pIRowset);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
if( !ulIndex )
{
// Check to see if there is only one column
Exphr = DB_E_ERRORSOCCURRED;
m_rgColumnIDs[ulIndex].uGuid.guid = GUID_NULL;
m_rgColumnIDs[ulIndex].eKind = 1000;
m_rgColumnIDs[ulIndex].uName.ulPropid = 1000;
continue;
}
// Check to see if there is more than one column
Exphr = DB_S_ERRORSOCCURRED;
}
// Check to see if there is only one column
if( m_cColumnIDs == 1 )
Exphr = DB_E_ERRORSOCCURRED;
TESTC_(m_hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER),Exphr);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(5)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Count of ColumnIDs is 0
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_5()
{
TBEGIN;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_row(FALSE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER),S_OK);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(6)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Valid count and valid range of ColumnIDs
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_6()
{
TBEGIN;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER),S_OK);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(7)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_BOOKMARKS
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_7()
{
TBEGIN;
if( !SupportedProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIDBInitialize) )
{
odtLog << L"Bookmarks are not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER,1, DBPROP_BOOKMARKS),S_OK);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(8)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Duplicate ColumnIDs
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_8()
{
TBEGIN;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_DUPLICATECOLUMNS, NULL, NEITHER),S_OK);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(9)
//*-----------------------------------------------------------------------
// @mfunc S_OK: ColumnIDs in reverse order
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_9()
{
TBEGIN;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_REVCOLLIST, NULL, NEITHER),S_OK);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(10)
//*-----------------------------------------------------------------------
// @mfunc S_OK: ColumnIDs from a view
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_10()
{
TBEGIN;
//If the provider is read only, skip the variation.
if( g_fReadOnlyProvider || m_pTable->GetSQLSupport() == DBPROPVAL_SQL_NONE )
{
odtLog << L"Provider is ReadOnly." << ENDL;
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
m_hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_REVCOLLISTFROMVIEW, NULL, PREPARE);
// Check to see if the create view failed
if( FAILED(m_hr) )
odtLog<<L"Create view not supported" <<ENDL;
else {
TESTC_(m_hr, S_OK);
}
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(11)
//*-----------------------------------------------------------------------
// @mfunc S_OK: MapColumnIDs on optional columns in IColumnsRowset
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_11()
{
TBEGIN;
DBORDINAL ulOptColOrd = 99;
DBORDINAL cOptColumns = 0;
DBID* rgOptColumns = NULL;
IColumnsRowset* pIColumnsRowset = NULL;
IRowset* pIRowsetColumns = NULL;
// Initialize the variation
INIT;
// SetText on command and get a Rowset
TESTC_(SetCommandText(m_pIMalloc, m_pICommand, m_pTable,
NULL, eSELECT, SELECT_COLLISTFROMTBL, NULL),S_OK);
TESTC_(m_pICommand->Execute(NULL,IID_IRowset,NULL,
NULL,(IUnknown **)&m_pIRowset),S_OK);
// Check to see if IColumnsRowset is supported
TESTC_PROVIDER(VerifyInterface(m_pIRowset, IID_IColumnsRowset,
ROWSET_INTERFACE, (IUnknown **)&pIColumnsRowset));
TESTC_(pIColumnsRowset->GetAvailableColumns(&cOptColumns,
&rgOptColumns),S_OK);
// Check for an optional column
TESTC_PROVIDER(cOptColumns && rgOptColumns);
// Pass first optional column
TESTC_(pIColumnsRowset->GetColumnsRowset(NULL, 1, rgOptColumns,
IID_IRowset, 0, NULL, (IUnknown**)&pIRowsetColumns),S_OK);
// Get a IID_IColumnsInfo pointer
TESTC(VerifyInterface(pIRowsetColumns, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns,
&m_rgInfo, &m_pStringsBuffer), S_OK);
TESTC_(m_pIColumnsInfo->MapColumnIDs(1, rgOptColumns,
&ulOptColOrd),S_OK);
TESTC(m_rgInfo[m_cColumns-1].iOrdinal == ulOptColOrd);
CLEANUP:
PROVIDER_FREE(rgOptColumns);
SAFE_RELEASE(pIColumnsRowset);
SAFE_RELEASE(pIRowsetColumns);
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(12)
//*-----------------------------------------------------------------------
// @mfunc S_OK: ColumnIDs from a count(*)
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_12()
{
TBEGIN;
// Initialize the variation
INIT;
TEST2C_(m_hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COUNT, NULL, NEITHER),S_OK,DB_E_NOTSUPPORTED);
//Skip variation if query is not supported.
TESTC_PROVIDER(m_hr != DB_E_NOTSUPPORTED)
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(13)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Change the DBKIND in the ColumnIDs
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_13()
{
TBEGIN;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK);
// Release the Rowset created
SAFE_RELEASE(m_pIRowset);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
if( (m_rgColumnIDs[ulIndex].eKind == DBKIND_NAME) ||
(m_rgColumnIDs[ulIndex].eKind == DBKIND_GUID_NAME) ||
(m_rgColumnIDs[ulIndex].eKind == DBKIND_PGUID_NAME) )
{
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
m_rgColumnIDs[ulIndex].uName.ulPropid = 1;
}
else
{
m_rgColumnIDs[ulIndex].eKind = DBKIND_NAME;
m_rgColumnIDs[ulIndex].uName.pwszName = L"Bogus";
}
}
TESTC_(m_hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER), DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(14)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Ask for Column 0 with DBKIND_PROPID
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_14()
{
TBEGIN;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK);
// Release the Rowset created
SAFE_RELEASE(m_pIRowset);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
m_rgColumnIDs[ulIndex].uName.ulPropid = 0;
}
TESTC_(m_hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER), DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(15)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Switch the DBKIND in the ColumnIDs
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_15()
{
TBEGIN;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK);
// Release the Rowset created
SAFE_RELEASE(m_pIRowset);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
switch(m_rgColumnIDs[ulIndex].eKind)
{
case DBKIND_NAME:
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID_NAME;
break;
case DBKIND_GUID_NAME:
case DBKIND_PGUID_NAME:
m_rgColumnIDs[ulIndex].eKind = DBKIND_NAME;
break;
case DBKIND_PROPID:
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID_PROPID;
break;
case DBKIND_GUID_PROPID:
case DBKIND_PGUID_PROPID:
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
break;
case DBKIND_GUID:
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID_PROPID;
break;
default:
assert(FALSE);
}
}
CHECKW(m_hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER), DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr, FALSE));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(16)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Change the GUID in the DBID
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_16()
{
TBEGIN;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK);
// Release the Rowset created
SAFE_RELEASE(m_pIRowset);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
switch(m_rgColumnIDs[ulIndex].eKind)
{
case DBKIND_PGUID_NAME:
case DBKIND_PGUID_PROPID:
*m_rgColumnIDs[ulIndex].uGuid.pguid = DBPROPSET_ROWSET;
break;
case DBKIND_NAME:
case DBKIND_PROPID:
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID;
case DBKIND_GUID:
case DBKIND_GUID_NAME:
case DBKIND_GUID_PROPID:
m_rgColumnIDs[ulIndex].uGuid.guid = DBPROPSET_ROWSET;
break;
}
}
TESTC_(m_hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, NEITHER), DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(17)
//*-----------------------------------------------------------------------
// @mfunc DB_S_ERRORSOCCURRED: ColumnID one greater than the last ordinal
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_17()
{
TBEGIN;
HRESULT Exphr = S_OK;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK);
// Release the Rowset created
SAFE_RELEASE(m_pIRowset);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
if( !ulIndex )
{
// Check to see if there is only one column
Exphr = DB_E_ERRORSOCCURRED;
if( m_rgColumnIDs[ulIndex].eKind != DBKIND_PROPID &&
m_rgColumnIDs[ulIndex].eKind != DBKIND_GUID_PROPID &&
m_rgColumnIDs[ulIndex].eKind != DBKIND_PGUID_PROPID )
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
m_rgColumnIDs[ulIndex].uName.ulPropid = ULONG(m_cColumnIDs+2);
continue;
}
// Check to see if there is more than one column
Exphr = DB_S_ERRORSOCCURRED;
}
// Check to see if there is only one column
if( m_cColumnIDs == 1 )
Exphr = DB_E_ERRORSOCCURRED;
TESTC_(m_hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),Exphr);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(18)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Ask for Column 0
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_ExecuteRowset::Variation_18()
{
TBEGIN;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK);
// Release the Rowset created
SAFE_RELEASE(m_pIRowset);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
if( m_rgColumnIDs[ulIndex].eKind != DBKIND_PROPID &&
m_rgColumnIDs[ulIndex].eKind != DBKIND_GUID_PROPID &&
m_rgColumnIDs[ulIndex].eKind != DBKIND_PGUID_PROPID )
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
m_rgColumnIDs[ulIndex].uName.ulPropid = 0;
}
m_hr=ExecuteMethod_row(FALSE, FALSE, FALSE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE);
// May or may not find the bookmark column
if( GetProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pICommand) ) {
TEST2C_(m_hr, DB_E_ERRORSOCCURRED, DB_S_ERRORSOCCURRED);
}
else {
TESTC_(m_hr, DB_E_ERRORSOCCURRED);
}
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_TERMINATE_METHOD
//--------------------------------------------------------------------
// @mfunc TestCase Termination Routine
//
// @rdesc TRUE or FALSE
//
BOOL MapColID_ExecuteRowset::Terminate()
{
// {{ TCW_TERM_BASECLASS_CHECK2
return(IColInfo::Terminate());
} // }}
// }}
// }}
// {{ TCW_TC_PROTOTYPE(MapColID_OpenRowset)
//*-----------------------------------------------------------------------
//| Test Case: MapColID_OpenRowset - MapColumnIDs on a rowset
//| Created: 09/20/96
//| Updated: 04/25/98
//*-----------------------------------------------------------------------
//--------------------------------------------------------------------
// @mfunc TestCase Initialization Routine
//
// @rdesc TRUE or FALSE
//
BOOL MapColID_OpenRowset::Init()
{
// Initialize for IColumnsInfo::MapColumnIDs
m_Method = MAPCOLID;
// {{ TCW_INIT_BASECLASS_CHECK
return IColInfo::Init(ROWSET_INTERFACE);
// }}
}
// {{ TCW_VAR_PROTOTYPE(1)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: cColumnIDs != 0, range = NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_OpenRowset::Variation_1()
{
TBEGIN;
IID iid = IID_IRowset;
// Initialize the variation
INIT;
TESTC_(m_hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset),S_OK);
TESTC(m_pIRowset != NULL);
TESTC(VerifyInterface(m_pIRowset, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Get the Column DBIDs
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK);
// Make array of DBIDs
TESTC_(m_hr=MakeDBIDArrays(TRUE,FALSE,TRUE),S_OK);
// run testing interface, validate params
TESTC_(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, m_rgColumns),E_INVALIDARG);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(2)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: rgColumns is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_OpenRowset::Variation_2()
{
TBEGIN;
IID iid = IID_IRowset;
// Initialize the variation
INIT;
TESTC_(m_hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset),S_OK);
TESTC(m_pIRowset != NULL);
TESTC(VerifyInterface(m_pIRowset, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Get the Column DBIDs
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK);
// Make array of DBIDs
TESTC_(m_hr=MakeDBIDArrays(TRUE,TRUE,FALSE),S_OK);
// run testing interface, validate params
TESTC_(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, m_rgColumns),E_INVALIDARG);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(3)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: All ColumnIDs are invalid
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_OpenRowset::Variation_3()
{
TBEGIN;
IID iid = IID_IRowset;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
// Initialize to Params
m_cColumnIDs = 5;
m_rgColumnIDs = (DBID *) PROVIDER_ALLOC(sizeof(DBID) * m_cColumnIDs);
m_rgColumns = (DBORDINAL *) PROVIDER_ALLOC(sizeof(DBORDINAL) * m_cColumnIDs);
TESTC(m_rgColumnIDs != NULL);
TESTC(m_rgColumns != NULL);
for(ulIndex=0; ulIndex < m_cColumnIDs; ulIndex++)
m_rgColumns[ulIndex] = INVALID(DBORDINAL);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
m_rgColumns[ulIndex] = 55;
m_rgColumnIDs[ulIndex].uGuid.guid = GUID_NULL;
m_rgColumnIDs[ulIndex].eKind = 1000;
m_rgColumnIDs[ulIndex].uName.ulPropid = 1000;
}
TESTC_(m_hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset),S_OK);
TESTC(m_pIRowset != NULL);
TESTC(VerifyInterface(m_pIRowset, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Get the Column DBIDs
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK);
// run testing interface, validate params
TESTC_(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, m_rgColumns),DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(4)
//*-----------------------------------------------------------------------
// @mfunc DB_S_ERRORSOCCURRED: One ColumnID is invalid
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_OpenRowset::Variation_4()
{
TBEGIN;
HRESULT Exphr = S_OK;
IID iid = IID_IRowset;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset),S_OK);
TESTC(m_pIRowset != NULL);
TESTC(VerifyInterface(m_pIRowset, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Get the Column DBIDs
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK);
// Make array of DBIDs
TESTC_(m_hr=MakeDBIDArrays(TRUE,TRUE,TRUE),S_OK);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
if( !ulIndex )
{
// Check to see if there is only one column
Exphr = DB_E_ERRORSOCCURRED;
m_rgColumnIDs[ulIndex].uGuid.guid = GUID_NULL;
m_rgColumnIDs[ulIndex].eKind = 1000;
m_rgColumnIDs[ulIndex].uName.ulPropid = 1000;
continue;
}
// Check to see if there is more than one column
Exphr = DB_S_ERRORSOCCURRED;
}
// run testing interface, validate params
TESTC_(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, m_rgColumns),Exphr);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(5)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Count of ColumnIDs is 0
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_OpenRowset::Variation_5()
{
TBEGIN;
IID iid = IID_IRowset;
// Initialize the variation
INIT;
TESTC_(m_hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset),S_OK);
TESTC(m_pIRowset != NULL);
TESTC(VerifyInterface(m_pIRowset, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Get the Column DBIDs
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK);
// Make array of DBIDs
TESTC_(m_hr=MakeDBIDArrays(FALSE,TRUE,TRUE),S_OK);
// run testing interface, validate params
TESTC_(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, m_rgColumns),S_OK);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(6)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Valid count and valid range of ColumnIDs
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_OpenRowset::Variation_6()
{
TBEGIN;
IID iid = IID_IRowset;
// Initialize the variation
INIT;
TESTC_(m_hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset),S_OK);
TESTC(m_pIRowset != NULL);
TESTC(VerifyInterface(m_pIRowset, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Get the Column DBIDs
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK);
// Make array of DBIDs
TESTC_(m_hr=MakeDBIDArrays(TRUE,TRUE,TRUE),S_OK);
// run testing interface, validate params
TESTC_(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, m_rgColumns),S_OK);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(7)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Ask for DBPROP_BOOKMARKS
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_OpenRowset::Variation_7()
{
TBEGIN;
IID iid = IID_IRowset;
if( !SupportedProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIDBInitialize) )
{
odtLog << L"Bookmarks are not supported.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
// Set Property
SetRowsetProperties(DBPROPSET_ROWSET,DBPROP_BOOKMARKS);
if( FAILED(m_hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset)) )
{
TESTC_(DB_E_ERRORSOCCURRED, m_hr);
TESTC(!m_pIRowset);
TESTC(m_rgPropSets->rgProperties->dwStatus == DBPROPSTATUS_NOTSETTABLE);
goto CLEANUP;
}
TESTC(m_pIRowset != NULL);
TESTC(VerifyInterface(m_pIRowset, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Get the Column DBIDs
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK);
// Make array of DBIDs
TESTC_(m_hr=MakeDBIDArrays(FALSE,TRUE,TRUE),S_OK);
// run testing interface, validate params
TESTC_(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, m_rgColumns),S_OK);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(8)
//*-----------------------------------------------------------------------
// @mfunc S_OK: MapColumnIDs on optional columns in IColumnsRowset
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_OpenRowset::Variation_8()
{
TBEGIN;
DBORDINAL ulOptColOrd = 99;
DBORDINAL cOptColumns = 0;
DBID* rgOptColumns = NULL;
IColumnsRowset* pIColumnsRowset = NULL;
IRowset* pIRowsetColumns = NULL;
IID iid = IID_IRowset;
// Initialize the variation
INIT;
TESTC_(m_hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset),S_OK);
TESTC(m_pIRowset != NULL);
// Check to see if IColumnsRowset is supported
TESTC_PROVIDER(VerifyInterface(m_pIRowset, IID_IColumnsRowset,
ROWSET_INTERFACE, (IUnknown **)&pIColumnsRowset));
TESTC_(pIColumnsRowset->GetAvailableColumns(&cOptColumns,
&rgOptColumns),S_OK);
// Check for an optional column
TESTC_PROVIDER(cOptColumns && rgOptColumns);
// Pass first optional column
TESTC_(pIColumnsRowset->GetColumnsRowset(NULL, 1, rgOptColumns,
IID_IRowset, 0, NULL, (IUnknown**)&pIRowsetColumns),S_OK);
// Get a IID_IColumnsInfo pointer
TESTC(VerifyInterface(pIRowsetColumns, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns,
&m_rgInfo, &m_pStringsBuffer), S_OK);
TESTC_(m_pIColumnsInfo->MapColumnIDs(1, rgOptColumns,
&ulOptColOrd),S_OK);
TESTC(m_rgInfo[m_cColumns-1].iOrdinal == ulOptColOrd);
CLEANUP:
PROVIDER_FREE(rgOptColumns);
SAFE_RELEASE(pIColumnsRowset);
SAFE_RELEASE(pIRowsetColumns);
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(9)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Change the DBKIND in the ColumnIDs
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_OpenRowset::Variation_9()
{
TBEGIN;
IID iid = IID_IRowset;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset),S_OK);
TESTC(m_pIRowset != NULL);
TESTC(VerifyInterface(m_pIRowset, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Get the Column DBIDs
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK);
// Make array of DBIDs
TESTC_(m_hr=MakeDBIDArrays(TRUE,TRUE,TRUE),S_OK);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
if( (m_rgColumnIDs[ulIndex].eKind == DBKIND_NAME) ||
(m_rgColumnIDs[ulIndex].eKind == DBKIND_GUID_NAME) ||
(m_rgColumnIDs[ulIndex].eKind == DBKIND_PGUID_NAME) )
{
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
m_rgColumnIDs[ulIndex].uName.ulPropid = 1;
}
else
{
m_rgColumnIDs[ulIndex].eKind = DBKIND_NAME;
m_rgColumnIDs[ulIndex].uName.pwszName = L"Bogus";
}
}
// run testing interface, validate params
TESTC_(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, m_rgColumns), DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(10)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Ask for Column 0 with DBKIND_PROPID
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_OpenRowset::Variation_10()
{
TBEGIN;
IID iid = IID_IRowset;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset),S_OK);
TESTC(m_pIRowset != NULL);
TESTC(VerifyInterface(m_pIRowset, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Get the Column DBIDs
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK);
// Make array of DBIDs
TESTC_(m_hr=MakeDBIDArrays(TRUE,TRUE,TRUE),S_OK);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
m_rgColumnIDs[ulIndex].uName.ulPropid = 0;
}
// run testing interface, validate params
TESTC_(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, m_rgColumns), DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(11)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Switch the DBKIND in the ColumnIDs
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_OpenRowset::Variation_11()
{
TBEGIN;
IID iid = IID_IRowset;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset),S_OK);
TESTC(m_pIRowset != NULL);
TESTC(VerifyInterface(m_pIRowset, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Get the Column DBIDs
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK);
// Make array of DBIDs
TESTC_(m_hr=MakeDBIDArrays(TRUE,TRUE,TRUE),S_OK);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
switch(m_rgColumnIDs[ulIndex].eKind)
{
case DBKIND_NAME:
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID_NAME;
break;
case DBKIND_GUID_NAME:
case DBKIND_PGUID_NAME:
m_rgColumnIDs[ulIndex].eKind = DBKIND_NAME;
break;
case DBKIND_PROPID:
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID_PROPID;
break;
case DBKIND_GUID_PROPID:
if(m_rgColumnIDs[ulIndex].uGuid.guid == DBCOL_SPECIALCOL)
m_rgColumnIDs[ulIndex].uName.ulPropid = 0;
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
break;
case DBKIND_PGUID_PROPID:
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
break;
case DBKIND_GUID:
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID_PROPID;
break;
default:
assert(FALSE);
}
}
// run testing interface, validate params
CHECKW(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, m_rgColumns), DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr, FALSE));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(12)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Change the GUID in the DBID
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_OpenRowset::Variation_12()
{
TBEGIN;
IID iid = IID_IRowset;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset),S_OK);
TESTC(m_pIRowset != NULL);
TESTC(VerifyInterface(m_pIRowset, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Get the Column DBIDs
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK);
// Make array of DBIDs
TESTC_(m_hr=MakeDBIDArrays(TRUE,TRUE,TRUE),S_OK);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
switch(m_rgColumnIDs[ulIndex].eKind)
{
case DBKIND_PGUID_NAME:
case DBKIND_PGUID_PROPID:
*m_rgColumnIDs[ulIndex].uGuid.pguid = DBPROPSET_ROWSET;
break;
case DBKIND_NAME:
case DBKIND_PROPID:
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID;
case DBKIND_GUID:
case DBKIND_GUID_NAME:
case DBKIND_GUID_PROPID:
m_rgColumnIDs[ulIndex].uGuid.guid = DBPROPSET_ROWSET;
break;
}
}
// run testing interface, validate params
TESTC_(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, m_rgColumns), DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(13)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Switch the DBKIND in the ColumnIDs with Bookmarks
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_OpenRowset::Variation_13()
{
TBEGIN;
IID iid = IID_IRowset;
DBORDINAL ulIndex = 0;
// Set Property
if( !SettableProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIDBInitialize) )
{
odtLog << L"Bookmarks are not settable.\n";
return TEST_SKIPPED;
}
// Initialize the variation
INIT;
// Set Property
SetRowsetProperties(DBPROPSET_ROWSET,DBPROP_BOOKMARKS);
TESTC_(m_hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset),S_OK);
TESTC(m_pIRowset != NULL);
TESTC(VerifyInterface(m_pIRowset, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Get the Column DBIDs
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK);
// Make array of DBIDs
TESTC_(m_hr=MakeDBIDArrays(TRUE,TRUE,TRUE),S_OK);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
switch(m_rgColumnIDs[ulIndex].eKind)
{
case DBKIND_NAME:
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID_NAME;
break;
case DBKIND_GUID_NAME:
case DBKIND_PGUID_NAME:
m_rgColumnIDs[ulIndex].eKind = DBKIND_NAME;
break;
case DBKIND_PROPID:
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID_PROPID;
break;
case DBKIND_GUID_PROPID:
case DBKIND_PGUID_PROPID:
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
break;
case DBKIND_GUID:
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID_PROPID;
break;
default:
assert(FALSE);
}
}
// run testing interface, validate params
CHECKW(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, m_rgColumns), DB_E_ERRORSOCCURRED);
// Validate the columns
QTESTC(CheckOrdinal(m_hr, FALSE));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(14)
//*-----------------------------------------------------------------------
// @mfunc DB_S_ERRORSOCCURRED: ColumnID one greater than the last ordinal
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_OpenRowset::Variation_14()
{
TBEGIN;
HRESULT Exphr = S_OK;
IID iid = IID_IRowset;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset),S_OK);
TESTC(m_pIRowset != NULL);
TESTC(VerifyInterface(m_pIRowset, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Get the Column DBIDs
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK);
// Make array of DBIDs
TESTC_(m_hr=MakeDBIDArrays(TRUE,TRUE,TRUE),S_OK);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
if (!ulIndex)
{
// Check to see if there is only one column
Exphr = DB_E_ERRORSOCCURRED;
if( m_rgColumnIDs[ulIndex].eKind != DBKIND_PROPID &&
m_rgColumnIDs[ulIndex].eKind != DBKIND_GUID_PROPID &&
m_rgColumnIDs[ulIndex].eKind != DBKIND_PGUID_PROPID )
m_rgColumnIDs[ulIndex].eKind = DBKIND_PROPID;
m_rgColumnIDs[ulIndex].uName.ulPropid = ULONG(m_cColumnIDs+2);
continue;
}
// Check to see if there is more than one column
Exphr = DB_S_ERRORSOCCURRED;
}
// run testing interface, validate params
TESTC_(m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, m_rgColumns), Exphr);
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_VAR_PROTOTYPE(15)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: Ask for Column 0
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColID_OpenRowset::Variation_15()
{
TBEGIN;
IID iid = IID_IRowset;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
TESTC_(m_hr=m_pIOpenRowset->OpenRowset(NULL, &m_pTable->GetTableID(),
NULL, iid, m_cPropSets, m_rgPropSets, (IUnknown **)&m_pIRowset),S_OK);
TESTC(m_pIRowset != NULL);
TESTC(VerifyInterface(m_pIRowset, IID_IColumnsInfo,
ROWSET_INTERFACE, (IUnknown **)&m_pIColumnsInfo));
// Get the Column DBIDs
TESTC_(m_hr=m_pIColumnsInfo->GetColumnInfo(&m_cColumns, &m_rgInfo,
&m_pStringsBuffer),S_OK);
// Make array of DBIDs
TESTC_(m_hr=MakeDBIDArrays(TRUE,TRUE,TRUE),S_OK);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
if( m_rgColumnIDs[ulIndex].eKind != DBKIND_PROPID &&
m_rgColumnIDs[ulIndex].eKind != DBKIND_GUID_PROPID &&
m_rgColumnIDs[ulIndex].eKind != DBKIND_PGUID_PROPID )
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID_PROPID;
m_rgColumnIDs[ulIndex].uName.ulPropid = 0;
}
// run testing interface, validate params
m_hr=m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs, m_rgColumnIDs, m_rgColumns);
// May or may not find the bookmark column
if( GetProperty(DBPROP_BOOKMARKS, DBPROPSET_ROWSET, m_pIRowset) ) {
TEST2C_(m_hr, DB_E_ERRORSOCCURRED, DB_S_ERRORSOCCURRED);
}
else {
TESTC_(m_hr, DB_E_ERRORSOCCURRED);
}
// Validate the columns
QTESTC(CheckOrdinal(m_hr));
CLEANUP:
FREE;
TRETURN;
}
// }}
// {{ TCW_TERMINATE_METHOD
//--------------------------------------------------------------------
// @mfunc TestCase Termination Routine
//
// @rdesc TRUE or FALSE
//
BOOL MapColID_OpenRowset::Terminate()
{
// {{ TCW_TERM_BASECLASS_CHECK2
return(IColInfo::Terminate());
} // }}
// }}
// }}
// {{ TCW_TC_PROTOTYPE(MapColIDRow_Rowset)
//*-----------------------------------------------------------------------
//| Test Case: MapColIDRow_Rowset - MapColumnIDs on a Row object
//| Created: 10/12/98
//*-----------------------------------------------------------------------
//*-----------------------------------------------------------------------
// @mfunc TestCase Initialization Routine
//
// @rdesc TRUE or FALSE
//
BOOL MapColIDRow_Rowset::Init()
{
EINTERFACE eIntf = ROWSET_INTERFACE;
if(m_eTestCase == TC_Cmd)
eIntf = COMMAND_INTERFACE;
// {{ TCW_INIT_BASECLASS_CHECK
if(IColInfo::Init(eIntf))
// }}
{
m_Method = MAPCOLID;
switch(m_eTestCase)
{
case TC_Rowset:
return GetRowFromRowset(FALSE);
case TC_Cmd:
return GetRowFromCommand(FALSE);
case TC_OpenRW:
return GetRowFromOpenRW(FALSE);
case TC_Bind:
return GetRowFromBind(FALSE);
case TC_IColInfo2:
return GetRowFromRowset(TRUE);
default:
ASSERT(!L"Unhandled Type...");
}
}
return FALSE;
}
// {{ TCW_VAR_PROTOTYPE(1)
//*-----------------------------------------------------------------------
// @mfunc S_OK: cColumnIDs = 0
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColIDRow_Rowset::Variation_1()
{
TBEGIN
m_cColumnIDs = 0;
SAFE_ALLOC(m_rgColumnIDs, DBID, 1);
SAFE_ALLOC(m_rgColumns, DBORDINAL, 1);
TESTC_(m_hr=CallMethodOnRowObj(FALSE), S_OK)
TESTC(m_rgColumnIDs != NULL)
TESTC(m_rgColumns != NULL)
CLEANUP:
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(2)
//*-----------------------------------------------------------------------
// @mfunc S_OK: All columns returned by GetColInfo
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColIDRow_Rowset::Variation_2()
{
TBEGIN
TESTC_(m_hr=CallMethodOnRowObj(FALSE, GETCOLINFO), S_OK)
m_cColumns = m_cColumns2;
m_rgInfo = m_rgInfo2;
TESTC_(MakeDBIDArrays(TRUE,TRUE,TRUE), S_OK)
TESTC_(m_hr=CallMethodOnRowObj(FALSE), S_OK)
QTESTC(CheckOrdinal(m_hr))
CLEANUP:
CLEAR
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(3)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Subset of columns returned by GetColInfo
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColIDRow_Rowset::Variation_3()
{
TBEGIN
TESTC_(m_hr=CallMethodOnRowObj(FALSE, GETCOLINFO), S_OK)
TESTC_PROVIDER(m_cColumns2>2)
m_cColumns = m_cColumns2 - 2;
m_rgInfo = &(m_rgInfo2[2]);
TESTC_(MakeDBIDArrays(TRUE,TRUE,TRUE), S_OK)
TESTC_(m_hr=CallMethodOnRowObj(FALSE), S_OK)
QTESTC(CheckOrdinal(m_hr))
TESTC(m_rgColumns[0] == m_rgInfo2[2].iOrdinal)
CLEANUP:
CLEAR
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(4)
//*-----------------------------------------------------------------------
// @mfunc S_OK: Columns out of order
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColIDRow_Rowset::Variation_4()
{
TBEGIN
DBORDINAL ulIndex = 0;
TESTC_(m_hr=CallMethodOnRowObj(FALSE, GETCOLINFO), S_OK)
TESTC_PROVIDER(m_cColumns2>2)
m_cColumns = m_cColumns2;
m_rgInfo = m_rgInfo2;
m_cColumnIDs = 2;
// Allocate memory for the array of DBID's
SAFE_ALLOC(m_rgColumnIDs, DBID, sizeof(DBID) * m_cColumnIDs);
// Copy DBIDs using DuplicateDBID, not memcpy
DuplicateDBID(m_rgInfo2[2].columnid, &(m_rgColumnIDs[0]));
DuplicateDBID(m_rgInfo2[0].columnid, &(m_rgColumnIDs[1]));
// Allocate memory for the array of DBID's
SAFE_ALLOC(m_rgColumns, DBORDINAL, sizeof(DBORDINAL) * m_cColumnIDs);
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
m_rgColumns[ulIndex] = DB_INVALIDCOLUMN;
TESTC_(m_hr=CallMethodOnRowObj(FALSE), S_OK)
QTESTC(CheckOrdinal(m_hr))
TESTC(m_rgColumns[0] == m_rgInfo2[2].iOrdinal)
TESTC(m_rgColumns[1] == m_rgInfo2[0].iOrdinal)
CLEANUP:
CLEAR
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(5)
//*-----------------------------------------------------------------------
// @mfunc DB_S_ERRORSOCCURRED: One ColumnID is invalid
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColIDRow_Rowset::Variation_5()
{
TBEGIN
DBORDINAL ulIndex;
TESTC_(m_hr=CallMethodOnRowObj(FALSE, GETCOLINFO), S_OK)
m_cColumns = m_cColumns2;
m_rgInfo = m_rgInfo2;
TESTC_(MakeDBIDArrays(TRUE,TRUE,TRUE), S_OK)
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
if (!ulIndex)
{
m_rgColumnIDs[ulIndex].uGuid.guid = GUID_NULL;
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID + 100;
m_rgColumnIDs[ulIndex].uName.ulPropid = 1000;
}
}
TEST2C_(m_hr=CallMethodOnRowObj(FALSE), DB_S_ERRORSOCCURRED, DB_E_ERRORSOCCURRED)
// Check to see if there is only one column
if (m_cColumnIDs == 1)
TESTC_(m_hr, DB_E_ERRORSOCCURRED);
QTESTC(CheckOrdinal(m_hr))
CLEANUP:
CLEAR
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(6)
//*-----------------------------------------------------------------------
// @mfunc DB_E_ERRORSOCCURRED: All ColumnIDs are invalid
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColIDRow_Rowset::Variation_6()
{
TBEGIN
DBORDINAL ulIndex;
TESTC_(m_hr=CallMethodOnRowObj(FALSE, GETCOLINFO), S_OK)
m_cColumns = m_cColumns2;
m_rgInfo = m_rgInfo2;
TESTC_(MakeDBIDArrays(TRUE,TRUE,TRUE), S_OK)
// Copy values into members
for(ulIndex=0; ulIndex<m_cColumnIDs; ulIndex++)
{
m_rgColumnIDs[ulIndex].uGuid.guid = GUID_NULL;
m_rgColumnIDs[ulIndex].eKind = DBKIND_GUID + 100;
m_rgColumnIDs[ulIndex].uName.ulPropid = 1000;
}
TESTC_(m_hr=CallMethodOnRowObj(FALSE), DB_E_ERRORSOCCURRED)
QTESTC(CheckOrdinal(m_hr))
CLEANUP:
CLEAR
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(7)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: cColumnIDs=1, rgColumnIDs=NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColIDRow_Rowset::Variation_7()
{
TBEGIN
if(m_pIColumnsInfo)
TESTC_(m_pIColumnsInfo->MapColumnIDs(1,NULL,m_rgColumns), E_INVALIDARG)
else
TESTC_(m_pIColumnsInfo2->MapColumnIDs(1,NULL,m_rgColumns), E_INVALIDARG)
CLEANUP:
CLEAR
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(8)
//*-----------------------------------------------------------------------
// @mfunc E_INVALIDARG: rgColumns is NULL
//
// @rdesc TEST_PASS or TEST_FAIL
//
int MapColIDRow_Rowset::Variation_8()
{
TBEGIN
TESTC_(m_hr=CallMethodOnRowObj(FALSE, GETCOLINFO), S_OK)
m_cColumns = m_cColumns2;
m_rgInfo = m_rgInfo2;
TESTC_(MakeDBIDArrays(TRUE,TRUE,TRUE), S_OK)
if(m_pIColumnsInfo)
TESTC_(m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,m_rgColumnIDs,NULL), E_INVALIDARG)
else
TESTC_(m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,m_rgColumnIDs,NULL), E_INVALIDARG)
CLEANUP:
CLEAR
Free(FALSE);
TRETURN
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_TERMINATE_METHOD
//*-----------------------------------------------------------------------
// @mfunc TestCase Termination Routine
//
// @rdesc TEST_PASS or TEST_FAIL
//
BOOL MapColIDRow_Rowset::Terminate()
{
SAFE_RELEASE(m_pIUnknown);
FREE;
// {{ TCW_TERM_BASECLASS_CHECK2
return(IColInfo::Terminate());
} // }}
// }} TCW_TERMINATE_METHOD_END
// }} TCW_TC_PROTOTYPE_END
// {{ TCW_TC_PROTOTYPE(ZombieClassCmd)
//*-----------------------------------------------------------------------
//| Test Case: ZombieClassCmd - zombie on command
//| Created: 09/20/96
//| Updated: 04/25/98
//*-----------------------------------------------------------------------
//--------------------------------------------------------------------
// @mfunc TestCase Initialization Routine
//
// @rdesc TRUE or FALSE
//
BOOL ZombieClassCmd::Init()
{
BOOL fReturn = FALSE;
// Check to see if Transactions are usable
if(!IsUsableInterface(SESSION_INTERFACE, IID_ITransactionLocal))
return TEST_SKIPPED;
// Initialize to a invalid pointer
m_pITransactionLocal = INVALID(ITransactionLocal*);
m_pIDBCreateCommand = INVALID(IDBCreateCommand*);
// {{ TCW_INIT_BASECLASS_CHECK
if(Zombie::Init())
// }}
{
//This is a mandatory interface, it should always succeed
if(RegisterInterface(COMMAND_INTERFACE, IID_IColumnsInfo, 0, NULL))
return TRUE;
}
// Check to see if ITransaction or Commands are supported
if( (!m_pITransactionLocal) || (!m_pIDBCreateCommand) )
fReturn = TEST_SKIPPED;
// Clear the bad pointer value
if(m_pIDBCreateCommand == INVALID(IDBCreateCommand*))
m_pIDBCreateCommand = NULL;
if(m_pITransactionLocal == INVALID(ITransactionLocal*))
m_pITransactionLocal = NULL;
return fReturn;
}
// {{ TCW_VAR_PROTOTYPE(1)
//*-----------------------------------------------------------------------
// @mfunc Abort with fRetaining set to TRUE
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassCmd::Variation_1()
{
return TestTxnCmd(ETXN_ABORT, TRUE);
}
// }}
// {{ TCW_VAR_PROTOTYPE(2)
//*-----------------------------------------------------------------------
// @mfunc Abort with fRetaining set to FALSE
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassCmd::Variation_2()
{
return TestTxnCmd(ETXN_ABORT, FALSE);
}
// }}
// {{ TCW_VAR_PROTOTYPE(3)
//*-----------------------------------------------------------------------
// @mfunc Commit with fRetaining set to TRUE
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassCmd::Variation_3()
{
return TestTxnCmd(ETXN_COMMIT, TRUE);
}
// }}
// {{ TCW_VAR_PROTOTYPE(4)
//*-----------------------------------------------------------------------
// @mfunc Commit with fRetaining set to FALSE
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassCmd::Variation_4()
{
return TestTxnCmd(ETXN_COMMIT, FALSE);
}
// }}
// {{ TCW_TERMINATE_METHOD
//--------------------------------------------------------------------
// @mfunc TestCase Termination Routine
//
// @rdesc TRUE or FALSE
//
BOOL ZombieClassCmd::Terminate()
{
// {{ TCW_TERM_BASECLASS_CHECK2
return(Zombie::Terminate());
} // }}
// }}
// }}
// {{ TCW_TC_PROTOTYPE(ZombieClassRowset)
//*-----------------------------------------------------------------------
//| Test Case: ZombieClassRowset - zombie on a rowset
//| Created: 09/20/96
//| Updated: 04/25/98
//*-----------------------------------------------------------------------
//--------------------------------------------------------------------
// @mfunc TestCase Initialization Routine
//
// @rdesc TRUE or FALSE
//
BOOL ZombieClassRowset::Init()
{
// Check to see if Transactions are usable
if(!IsUsableInterface(SESSION_INTERFACE, IID_ITransactionLocal))
return TEST_SKIPPED;
// Initialize to a invalid pointer
m_pITransactionLocal = INVALID(ITransactionLocal*);
// {{ TCW_INIT_BASECLASS_CHECK
if(Zombie::Init())
// }}
{
//This is a mandatory interface, it should always succeed
if(RegisterInterface(ROWSET_INTERFACE, IID_IColumnsInfo, 0, NULL))
return TRUE;
}
// Check to see if ITransaction is supported
if(!m_pITransactionLocal)
return TEST_SKIPPED;
// Clear the bad pointer value
if(m_pITransactionLocal == INVALID(ITransactionLocal*))
m_pITransactionLocal = NULL;
return FALSE;
}
// {{ TCW_VAR_PROTOTYPE(1)
//*-----------------------------------------------------------------------
// @mfunc Abort with fRetaining set to TRUE
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassRowset::Variation_1()
{
return TestTxnRowset(ETXN_ABORT, TRUE);
}
// }}
// {{ TCW_VAR_PROTOTYPE(2)
//*-----------------------------------------------------------------------
// @mfunc Abort with fRetaining set to FALSE
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassRowset::Variation_2()
{
return TestTxnRowset(ETXN_ABORT, FALSE);
}
// }}
// {{ TCW_VAR_PROTOTYPE(3)
//*-----------------------------------------------------------------------
// @mfunc Commit with fRetaining set to TRUE
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassRowset::Variation_3()
{
return TestTxnRowset(ETXN_COMMIT, TRUE);
}
// }}
// {{ TCW_VAR_PROTOTYPE(4)
//*-----------------------------------------------------------------------
// @mfunc Commit with fRetaining set to FALSE
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassRowset::Variation_4()
{
return TestTxnRowset(ETXN_COMMIT, FALSE);
}
// }}
// {{ TCW_VAR_PROTOTYPE(5)
//*-----------------------------------------------------------------------
// @mfunc Abort with fRetaining set to TRUE for Multiple Rowsets
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassRowset::Variation_5()
{
return TestTxnRowset(ETXN_ABORT, TRUE, TRUE);
}
// }}
// {{ TCW_VAR_PROTOTYPE(6)
//*-----------------------------------------------------------------------
// @mfunc Abort with fRetaining set to FALSE for Multiple Rowsets
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassRowset::Variation_6()
{
return TestTxnRowset(ETXN_ABORT, FALSE, TRUE);
}
// }}
// {{ TCW_VAR_PROTOTYPE(7)
//*-----------------------------------------------------------------------
// @mfunc Commit with fRetaining set to TRUE for Multiple Rowsets
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassRowset::Variation_7()
{
return TestTxnRowset(ETXN_COMMIT, TRUE, TRUE);
}
// }}
// {{ TCW_VAR_PROTOTYPE(8)
//*-----------------------------------------------------------------------
// @mfunc Commit with fRetaining set to FALSE for Multiple Rowsets
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassRowset::Variation_8()
{
return TestTxnRowset(ETXN_COMMIT, FALSE, TRUE);
}
// }}
// {{ TCW_TERMINATE_METHOD
//--------------------------------------------------------------------
// @mfunc TestCase Termination Routine
//
// @rdesc TRUE or FALSE
//
BOOL ZombieClassRowset::Terminate()
{
// {{ TCW_TERM_BASECLASS_CHECK2
return(Zombie::Terminate());
} // }}
// }}
// }}
// {{ TCW_TC_PROTOTYPE(ZombieClassRow)
//*-----------------------------------------------------------------------
//| Test Case: ZombieClassRow - zombie on a row
//| Created: 1/28/99
//*-----------------------------------------------------------------------
//*-----------------------------------------------------------------------
// @mfunc TestCase Initialization Routine
//
// @rdesc TRUE or FALSE
//
BOOL ZombieClassRow::Init()
{
// Check to see if Transactions are usable
if(!IsUsableInterface(SESSION_INTERFACE, IID_ITransactionLocal))
return TEST_SKIPPED;
// Initialize to a invalid pointer
m_pITransactionLocal = INVALID(ITransactionLocal*);
// {{ TCW_INIT_BASECLASS_CHECK
if(Zombie::Init())
// }}
{
//This is a mandatory interface, it should always succeed
if(RegisterInterface(ROW_INTERFACE, IID_IColumnsInfo, 0, NULL))
return TRUE;
//Check to see if the interface is supported (IGetRow off the Rowset)
if( m_hr == E_NOINTERFACE )
return TEST_SKIPPED;
}
// Check to see if ITransaction is supported
if(!m_pITransactionLocal)
return TEST_SKIPPED;
// Clear the bad pointer value
if(m_pITransactionLocal == INVALID(ITransactionLocal*))
m_pITransactionLocal = NULL;
return FALSE;
}
// {{ TCW_VAR_PROTOTYPE(1)
//*-----------------------------------------------------------------------
// @mfunc Abort with fRetaining set to TRUE
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassRow::Variation_1()
{
return TestTxnRow(ETXN_ABORT, TRUE);
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(2)
//*-----------------------------------------------------------------------
// @mfunc Abort with fRetaining set to FALSE
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassRow::Variation_2()
{
return TestTxnRow(ETXN_ABORT, FALSE);
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(3)
//*-----------------------------------------------------------------------
// @mfunc Commit with fRetaining set to TRUE
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassRow::Variation_3()
{
return TestTxnRow(ETXN_COMMIT, TRUE);
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_VAR_PROTOTYPE(4)
//*-----------------------------------------------------------------------
// @mfunc Commit with fRetaining set to FALSE
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ZombieClassRow::Variation_4()
{
return TestTxnRow(ETXN_COMMIT, FALSE);
}
// }} TCW_VAR_PROTOTYPE_END
// {{ TCW_TERMINATE_METHOD
//*-----------------------------------------------------------------------
// @mfunc TestCase Termination Routine
//
// @rdesc TEST_PASS or TEST_FAIL
//
BOOL ZombieClassRow::Terminate()
{
// TO DO: Add your own code here
// {{ TCW_TERM_BASECLASS_CHECK2
return(Zombie::Terminate());
} // }}
// }} TCW_TERMINATE_METHOD_END
// }} TCW_TC_PROTOTYPE_END
// {{ TCW_TC_PROTOTYPE(ExtendedErrors)
//*-----------------------------------------------------------------------
//| Test Case: ExtendedErrors - extended error tests
//| Created: 09/20/96
//| Updated: 04/25/98
//*-----------------------------------------------------------------------
//--------------------------------------------------------------------
// @mfunc TestCase Initialization Routine
//
// @rdesc TRUE or FALSE
//
BOOL ExtendedErrors::Init()
{
BOOL fResult = TEST_SKIPPED;
ISupportErrorInfo *pISupportErrorInfo = NULL;
// {{ TCW_INIT_BASECLASS_CHECK
if(IColInfo::Init(COMMAND_INTERFACE))
// }}
{
INIT;
if(!m_pICommand)
goto CLEANUP;
if((m_pICommand->QueryInterface(IID_ISupportErrorInfo, (void **)&pISupportErrorInfo))== E_NOINTERFACE)
{
odtLog<<L"ISupportErrorInfo is not supported."<<ENDL;
goto CLEANUP;
}
fResult = TRUE;
}
else
return FALSE;
CLEANUP:
SAFE_RELEASE(pISupportErrorInfo);
FREE;
return fResult;
}
// {{ TCW_VAR_PROTOTYPE(1)
//*-----------------------------------------------------------------------
// @mfunc Valid IColumnsInfo calls on the Command with previous error object existing
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ExtendedErrors::Variation_1()
{
BOOL fResult = TEST_FAIL;
HRESULT hr = E_FAIL;
// Initialize the variation
INIT;
m_Method = GETCOLINFO;
if (!CHECK(hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE, 1), S_OK))
goto CLEANUP;
// Free the memory
FreeColumnInfo(&m_cColumns, &m_rgInfo, &m_pStringsBuffer);
// Cause an error
m_pExtError->CauseError();
// Do extended check following GetColumnInfo
if(CHECK(hr = m_pIColumnsInfo->GetColumnInfo(&m_cColumns,
&m_rgInfo, &m_pStringsBuffer), S_OK))
fResult = XCHECK(m_pIColumnsInfo, IID_IColumnsInfo, hr);
// Validate the columns
CheckEachColumn(hr);
FREE;
// Initialize the variation
INIT;
m_Method = MAPCOLID;
if (!CHECK(hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK))
goto CLEANUP;
// Cause an error
m_pExtError->CauseError();
// Do extended check following MapColumnIDs
if(CHECK(hr = m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, m_rgColumns), S_OK))
fResult &= XCHECK(m_pIColumnsInfo, IID_IColumnsInfo, hr);
// Validate the columns
QTESTC(CheckOrdinal(hr));
CLEANUP:
FREE;
if (fResult)
return TEST_PASS;
else
return TEST_FAIL;
}
// }}
// {{ TCW_VAR_PROTOTYPE(2)
//*-----------------------------------------------------------------------
// @mfunc Invalid IColumnsInfo calls on the Command with previous eror object existing
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ExtendedErrors::Variation_2()
{
BOOL fResult = TEST_FAIL;
HRESULT hr = E_FAIL;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
m_Method = GETCOLINFO;
if (!CHECK(hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE, 1), S_OK))
goto CLEANUP;
// Free the memory
FreeColumnInfo(&m_cColumns, &m_rgInfo, &m_pStringsBuffer);
// Cause an error
m_pExtError->CauseError();
// Do extended check following GetColumnInfo
if(CHECK(hr = m_pIColumnsInfo->GetColumnInfo(&m_cColumns,
&m_rgInfo, NULL), E_INVALIDARG))
fResult = XCHECK(m_pIColumnsInfo, IID_IColumnsInfo, hr);
// Validate the columns
CheckEachColumn(hr);
FREE;
// Initialize the variation
INIT;
m_Method = MAPCOLID;
if (!CHECK(hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK))
goto CLEANUP;
// Cause an error
m_pExtError->CauseError();
// Reset the rgColumns array
for(ulIndex=0; ulIndex < m_cColumnIDs; ulIndex++)
m_rgColumns[ulIndex] = INVALID(DBORDINAL);
// Do extended check following MapColumnIDs
if(CHECK(hr = m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, NULL), E_INVALIDARG))
fResult &= XCHECK(m_pIColumnsInfo, IID_IColumnsInfo, hr);
// Validate the columns
QTESTC(CheckOrdinal(hr));
CLEANUP:
FREE;
if (fResult)
return TEST_PASS;
else
return TEST_FAIL;
}
// }}
// {{ TCW_VAR_PROTOTYPE(3)
//*-----------------------------------------------------------------------
// @mfunc Invalid IColumnsInfo calls on the Command with no previous error object existing
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ExtendedErrors::Variation_3()
{
BOOL fResult = TEST_FAIL;
HRESULT hr = E_FAIL;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
m_Method = GETCOLINFO;
if (!CHECK(hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE, 1), S_OK))
goto CLEANUP;
// Free the memory
FreeColumnInfo(&m_cColumns, &m_rgInfo, &m_pStringsBuffer);
// Do extended check following GetColumnInfo
if(CHECK(hr = m_pIColumnsInfo->GetColumnInfo(&m_cColumns,
&m_rgInfo, NULL), E_INVALIDARG))
fResult = XCHECK(m_pIColumnsInfo, IID_IColumnsInfo, hr);
// Validate the columns
CheckEachColumn(hr);
FREE;
// Initialize the variation
INIT;
m_Method = MAPCOLID;
if (!CHECK(hr=ExecuteMethod_cmd(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK))
goto CLEANUP;
// Reset the rgColumns array
for(ulIndex=0; ulIndex < m_cColumnIDs; ulIndex++)
m_rgColumns[ulIndex] = INVALID(DBORDINAL);
// Do extended check following MapColumnIDs
if(CHECK(hr = m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, NULL), E_INVALIDARG))
fResult &= XCHECK(m_pIColumnsInfo, IID_IColumnsInfo, hr);
// Validate the columns
QTESTC(CheckOrdinal(hr));
CLEANUP:
FREE;
if (fResult)
return TEST_PASS;
else
return TEST_FAIL;
}
// }}
// {{ TCW_VAR_PROTOTYPE(4)
//*-----------------------------------------------------------------------
// @mfunc Valid IColumnsInfo calls on the Rowset with previous error object existing
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ExtendedErrors::Variation_4()
{
BOOL fResult = TEST_FAIL;
HRESULT hr = E_FAIL;
// Initialize the variation
INIT;
m_Method = GETCOLINFO;
if (!CHECK(hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE, 1), S_OK))
goto CLEANUP;
// Free the memory
FreeColumnInfo(&m_cColumns, &m_rgInfo, &m_pStringsBuffer);
// Cause an error
m_pExtError->CauseError();
// Do extended check following GetColumnInfo
if(CHECK(hr = m_pIColumnsInfo->GetColumnInfo(&m_cColumns,
&m_rgInfo, &m_pStringsBuffer), S_OK))
fResult = XCHECK(m_pIColumnsInfo, IID_IColumnsInfo, hr);
// Validate the columns
CheckEachColumn(hr);
FREE;
// Initialize the variation
INIT;
m_Method = MAPCOLID;
if (!CHECK(hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK))
goto CLEANUP;
// Cause an error
m_pExtError->CauseError();
// Do extended check following MapColumnIDs
if(CHECK(hr = m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, m_rgColumns), S_OK))
fResult &= XCHECK(m_pIColumnsInfo, IID_IColumnsInfo, hr);
// Validate the columns
QTESTC(CheckOrdinal(hr));
CLEANUP:
FREE;
if (fResult)
return TEST_PASS;
else
return TEST_FAIL;
}
// }}
// {{ TCW_VAR_PROTOTYPE(5)
//*-----------------------------------------------------------------------
// @mfunc Invalid IColumnsInfo calls on the Rowset with previous error object exisiting
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ExtendedErrors::Variation_5()
{
BOOL fResult = TEST_FAIL;
HRESULT hr = E_FAIL;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
m_Method = GETCOLINFO;
if (!CHECK(hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE, 1), S_OK))
goto CLEANUP;
// Free the memory
FreeColumnInfo(&m_cColumns, &m_rgInfo, &m_pStringsBuffer);
// Cause an error
m_pExtError->CauseError();
// Reset the rgColumns array
for(ulIndex=0; ulIndex < m_cColumnIDs; ulIndex++)
m_rgColumns[ulIndex] = INVALID(DBORDINAL);
// Do extended check following GetColumnInfo
if(CHECK(hr = m_pIColumnsInfo->GetColumnInfo(&m_cColumns,
&m_rgInfo, NULL), E_INVALIDARG))
fResult = XCHECK(m_pIColumnsInfo, IID_IColumnsInfo, hr);
// Validate the columns
CheckEachColumn(hr);
FREE;
// Initialize the variation
INIT;
m_Method = MAPCOLID;
if (!CHECK(hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK))
goto CLEANUP;
// Cause an error
m_pExtError->CauseError();
// Reset the rgColumns array
for(ulIndex=0; ulIndex < m_cColumnIDs; ulIndex++)
m_rgColumns[ulIndex] = INVALID(DBORDINAL);
// Do extended check following MapColumnIDs
if(CHECK(hr = m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, NULL), E_INVALIDARG))
fResult &= XCHECK(m_pIColumnsInfo, IID_IColumnsInfo, hr);
// Validate the columns
QTESTC(CheckOrdinal(hr));
CLEANUP:
FREE;
if (fResult)
return TEST_PASS;
else
return TEST_FAIL;
}
// }}
// {{ TCW_VAR_PROTOTYPE(6)
//*-----------------------------------------------------------------------
// @mfunc Invalid IColumnsInfo calls on the Rowset with no previous error object exisiting
//
// @rdesc TEST_PASS or TEST_FAIL
//
int ExtendedErrors::Variation_6()
{
BOOL fResult = TEST_FAIL;
HRESULT hr = E_FAIL;
DBORDINAL ulIndex = 0;
// Initialize the variation
INIT;
m_Method = GETCOLINFO;
if (!CHECK(hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE, 1), S_OK))
goto CLEANUP;
// Free the memory
FreeColumnInfo(&m_cColumns, &m_rgInfo, &m_pStringsBuffer);
// Do extended check following GetColumnInfo
if(CHECK(hr = m_pIColumnsInfo->GetColumnInfo(&m_cColumns,
&m_rgInfo, NULL), E_INVALIDARG))
fResult = XCHECK(m_pIColumnsInfo, IID_IColumnsInfo, hr);
// Validate the columns
CheckEachColumn(hr);
FREE;
// Initialize the variation
INIT;
m_Method = MAPCOLID;
if (!CHECK(hr=ExecuteMethod_row(TRUE, TRUE, TRUE, eSELECT,
SELECT_COLLISTFROMTBL, NULL, PREPARE),S_OK))
goto CLEANUP;
// Reset the rgColumns array
for(ulIndex=0; ulIndex < m_cColumnIDs; ulIndex++)
m_rgColumns[ulIndex] = INVALID(DBORDINAL);
// Do extended check following MapColumnIDs
if(CHECK(hr = m_pIColumnsInfo->MapColumnIDs(m_cColumnIDs,
m_rgColumnIDs, NULL), E_INVALIDARG))
fResult &= XCHECK(m_pIColumnsInfo, IID_IColumnsInfo, hr);
// Validate the columns
QTESTC(CheckOrdinal(hr));
CLEANUP:
FREE;
if (fResult)
return TEST_PASS;
else
return TEST_FAIL;
}
// }}
// {{ TCW_TERMINATE_METHOD
//--------------------------------------------------------------------
// @mfunc TestCase Termination Routine
//
// @rdesc TRUE or FALSE
//
BOOL ExtendedErrors::Terminate()
{
// {{ TCW_TERM_BASECLASS_CHECK2
return(IColInfo::Terminate());
} // }}
// }}
// }}