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

255 lines
9.2 KiB
C

//--------------------------------------------------------------------
// Microsoft OLE DB Test
//
// Copyright 1995-2000 Microsoft Corporation.
//
// @doc
//
// @module ICOLROW.H | Header file for IColumnsRowset test module.
//
// @rev 01 | 09-06-95 | Microsoft | Created
// @rev 02 | 12-01-96 | Microsoft | Updated
//
#ifndef _ICOLROW_H_
#define _ICOLROW_H_
#include "oledb.h" // OLE DB Header Files
#include "oledberr.h"
#include "privlib.h" //include private library, which includes
//-----------------------------------------------------------------------------
// Defines
//-----------------------------------------------------------------------------
#define PPI (IUnknown **)
#define TABLE_RESTRICT 0x3 // Restriction bit set for TableName restriction
#define RESTRICTION_COUNT 4 // Count of restrictions
#define TABLES_COLS 3 // Count of columns needed from Tables rowset
const WCHAR wszNULLERROR[]=L"This field should never return null but it did\n";
//-----------------------------------------------------------------------------
// ENUM
//-----------------------------------------------------------------------------
enum PREPARATION {SUPPORTED, NOTSUPPORTED, PREP_UNKNOWN};
enum OPTCOLUMNS
{
ALLDBID,
SOMEDBID,
REVERSEDBID,
DUPLICATEDBID,
INVALIDDBID,
NONEDBID
};
enum ETXN {ETXN_COMMIT, ETXN_ABORT};
enum EMETHOD {EMETHOD_AVAILCOL, EMETHOD_COLROWSET};
enum PROPVALS
{
BADCOLID,
BADTYPE,
BADVALUE,
VALIDROWSET
};
enum PROPOPTION
{
BADOPTION,
ISOPTIONAL,
REQUIRED
};
enum FEATURE
{
CATALOGNAME,
SCHEMANAME
};
// Structure for checking IColumnsRowset's ColumnsInfo
struct COLROWINFO
{
// These are meant to be filled in by derived classes:
ULONG ulOrdinal; // Ordinal of the Column.
const DBID * columnid; // Column ID.
WCHAR pwszName[100]; // Column Name.
ULONG ulColumnSize; // Size of the Column.
DBTYPE dbtype; // OLE DB type.
BYTE bPrecision; // Max column precision.
BYTE bScale; // Max column scale.
DWORD dwFlags; // DBColumn_Flags.
};
#define MANCOL 11 // Number of mandatory columns
#ifdef _WIN64
#define DBPRECISION 20
#else
#define DBPRECISION 10
#endif
// This represents the IColumnsRowset column info
COLROWINFO g_rgColRowInfo[] =
{
//Ord Guid Name Size Type Precision Scale Flags
// Bookmark
{ 0, &DB_NULLID, L"", sizeof(ULONG), DBTYPE_UI4, 10, 255, 81,},
// Mandatory columns
{ 1, &DBCOLUMN_IDNAME, L"DBCOLUMN_IDNAME", 128, DBTYPE_WSTR, 255, 255, 112,},
{ 2, &DBCOLUMN_GUID, L"DBCOLUMN_GUID", sizeof(GUID), DBTYPE_GUID, 255, 255, 112,},
{ 3, &DBCOLUMN_PROPID, L"DBCOLUMN_PROPID", sizeof(ULONG), DBTYPE_UI4, 10, 255, 112,},
{ 4, &DBCOLUMN_NAME, L"DBCOLUMN_NAME", 128, DBTYPE_WSTR, 255, 255, 112,},
{ 5, &DBCOLUMN_NUMBER, L"DBCOLUMN_NUMBER", sizeof(ULONG_PTR), DBTYPEFOR_DBORDINAL, DBPRECISION, 255, 80,},
{ 6, &DBCOLUMN_TYPE, L"DBCOLUMN_TYPE", sizeof(USHORT), DBTYPE_UI2, 5, 255, 80,},
{ 7, &DBCOLUMN_TYPEINFO, L"DBCOLUMN_TYPEINFO", sizeof(IUnknown), DBTYPE_IUNKNOWN,255, 255, 112,},
{ 8, &DBCOLUMN_COLUMNSIZE, L"DBCOLUMN_COLUMNSIZE", sizeof(ULONG_PTR), DBTYPEFOR_DBLENGTH, DBPRECISION, 255, 80,},
{ 9, &DBCOLUMN_PRECISION, L"DBCOLUMN_PRECISION", sizeof(USHORT), DBTYPE_UI2, 5, 255, 112,},
{ 10, &DBCOLUMN_SCALE, L"DBCOLUMN_SCALE", sizeof(SHORT), DBTYPE_I2, 5, 255, 112,},
{ 11, &DBCOLUMN_FLAGS, L"DBCOLUMN_FLAGS", sizeof(ULONG), DBTYPE_UI4, 10, 255, 80,},
// Optional columns
{ 12, &DBCOLUMN_BASECATALOGNAME, L"DBCOLUMN_BASECATALOGNAME", 128, DBTYPE_WSTR, 255, 255, 112,},
{ 13, &DBCOLUMN_BASECOLUMNNAME, L"DBCOLUMN_BASECOLUMNNAME", 128, DBTYPE_WSTR, 255, 255, 112,},
{ 14, &DBCOLUMN_BASESCHEMANAME, L"DBCOLUMN_BASESCHEMANAME", 128, DBTYPE_WSTR, 255, 255, 112,},
{ 15, &DBCOLUMN_BASETABLENAME, L"DBCOLUMN_BASETABLENAME", 128, DBTYPE_WSTR, 255, 255, 112,},
{ 16, &DBCOLUMN_CLSID, L"DBCOLUMN_CLSID", sizeof(GUID), DBTYPE_GUID, 255, 255, 112,},
{ 17, &DBCOLUMN_COLLATINGSEQUENCE, L"DBCOLUMN_COLLATINGSEQUENCE", sizeof(LONG), DBTYPE_I4, 10, 255, 112,},
{ 18, &DBCOLUMN_COMPUTEMODE, L"DBCOLUMN_COMPUTEMODE", sizeof(LONG), DBTYPE_I4, 10, 255, 112,},
{ 19, &DBCOLUMN_DATETIMEPRECISION, L"DBCOLUMN_DATETIMEPRECISION", sizeof(LONG), DBTYPE_UI4, 10, 255, 112,},
{ 20, &DBCOLUMN_DEFAULTVALUE, L"DBCOLUMN_DEFAULTVALUE", sizeof(VARIANT), DBTYPE_VARIANT, 255, 255, 112,},
{ 21, &DBCOLUMN_DOMAINCATALOG, L"DBCOLUMN_DOMAINCATALOG", 128, DBTYPE_WSTR, 255, 255, 112,},
{ 22, &DBCOLUMN_DOMAINSCHEMA, L"DBCOLUMN_DOMAINSCHEMA", 128, DBTYPE_WSTR, 255, 255, 112,},
{ 23, &DBCOLUMN_DOMAINNAME, L"DBCOLUMN_DOMAINNAME", 128, DBTYPE_WSTR, 255, 255, 112,},
{ 24, &DBCOLUMN_HASDEFAULT, L"DBCOLUMN_HASDEFAULT", sizeof(VARIANT_BOOL), DBTYPE_BOOL, 255, 255, 112,},
{ 25, &DBCOLUMN_ISAUTOINCREMENT, L"DBCOLUMN_ISAUTOINCREMENT", sizeof(VARIANT_BOOL), DBTYPE_BOOL, 255, 255, 16,},
{ 26, &DBCOLUMN_ISCASESENSITIVE, L"DBCOLUMN_ISCASESENSITIVE", sizeof(VARIANT_BOOL), DBTYPE_BOOL, 255, 255, 112,},
{ 27, &DBCOLUMN_ISSEARCHABLE, L"DBCOLUMN_ISSEARCHABLE", sizeof(ULONG), DBTYPE_UI4, 10, 255, 112,},
{ 28, &DBCOLUMN_ISUNIQUE, L"DBCOLUMN_ISUNIQUE", sizeof(VARIANT_BOOL), DBTYPE_BOOL, 255, 255, 112,},
{ 29, &DBCOLUMN_MAYSORT, L"DBCOLUMN_MAYSORT", sizeof(VARIANT_BOOL), DBTYPE_BOOL, 255, 255, 16,},
{ 30, &DBCOLUMN_OCTETLENGTH, L"DBCOLUMN_OCTETLENGTH", sizeof(ULONG_PTR), DBTYPEFOR_DBLENGTH, DBPRECISION, 255, 112,},
{ 31, &DBCOLUMN_KEYCOLUMN, L"DBCOLUMN_KEYCOLUMN", sizeof(VARIANT_BOOL), DBTYPE_BOOL, 255, 255, 16,},
{ 32, &DBCOLUMN_BASETABLEVERSION, L"DBCOLUMN_BASETABLEVERSION", sizeof(ULARGE_INTEGER), DBTYPE_UI8, 20, 255, 16,}
};
//-----------------------------------------------------------------------------
// Mandatory Rowset Object interfaces
//-----------------------------------------------------------------------------
const IID * g_rgIIDRowset[]=
{
&IID_IUnknown,
&IID_IAccessor,
&IID_IRowsetInfo,
&IID_IColumnsInfo,
&IID_IConvertType,
&IID_IRowset
};
const WCHAR * g_rgwszRowset[]=
{
L"IID_IUnknown",
L"IID_IAccessor",
L"IID_IRowsetInfo",
L"IID_IColumnsInfo",
L"IID_IConvertType",
L"IID_IRowset",
};
#define ROWSET NUMELEM(g_rgIIDRowset)
// The following structure and #defines are for dev bug 2259
#define SQL_COLUMN_COUNT 0
#define SQL_COLUMN_NAME 1
#define SQL_COLUMN_TYPE 2
#define SQL_COLUMN_LENGTH 3
#define SQL_COLUMN_PRECISION 4
#define SQL_COLUMN_SCALE 5
#define SQL_COLUMN_DISPLAY_SIZE 6
#define SQL_COLUMN_NULLABLE 7
#define SQL_COLUMN_UNSIGNED 8
#define SQL_COLUMN_MONEY 9
#define SQL_COLUMN_UPDATABLE 10
#define SQL_COLUMN_AUTO_INCREMENT 11
#define SQL_COLUMN_CASE_SENSITIVE 12
#define SQL_COLUMN_SEARCHABLE 13
#define SQL_COLUMN_TYPE_NAME 14
#define COLATTRIB_MAX 15
ULONG g_rgCOLATTRIB[COLATTRIB_MAX]=
{
SQL_COLUMN_COUNT,
SQL_COLUMN_NAME,
SQL_COLUMN_TYPE,
SQL_COLUMN_LENGTH,
SQL_COLUMN_PRECISION,
SQL_COLUMN_SCALE,
SQL_COLUMN_DISPLAY_SIZE,
SQL_COLUMN_NULLABLE,
SQL_COLUMN_UNSIGNED,
SQL_COLUMN_MONEY,
SQL_COLUMN_UPDATABLE,
SQL_COLUMN_AUTO_INCREMENT,
SQL_COLUMN_CASE_SENSITIVE,
SQL_COLUMN_SEARCHABLE,
SQL_COLUMN_TYPE_NAME
};
// from odbcss.h
#define SQL_CA_SS_BASE 1200
#define SQL_CA_SS_COLUMN_SSTYPE (SQL_CA_SS_BASE+0) // dbcoltype/dbaltcoltype
#define SQL_CA_SS_COLUMN_UTYPE (SQL_CA_SS_BASE+1) // dbcolutype/dbaltcolutype
#define SQL_CA_SS_NUM_ORDERS (SQL_CA_SS_BASE+2) // dbnumorders
#define SQL_CA_SS_COLUMN_ORDER (SQL_CA_SS_BASE+3) // dbcolorder
#define SQL_CA_SS_COLUMN_VARYLEN (SQL_CA_SS_BASE+4) // dbvarylen
#define SQL_CA_SS_NUM_COMPUTES (SQL_CA_SS_BASE+5) // dbnumcompute
#define SQL_CA_SS_COMPUTE_ID (SQL_CA_SS_BASE+6) // dbnextrow status return
#define SQL_CA_SS_COMPUTE_BYLIST (SQL_CA_SS_BASE+7) // dbbylist
#define SQL_CA_SS_COLUMN_ID (SQL_CA_SS_BASE+8) // dbaltcolid
#define SQL_CA_SS_COLUMN_OP (SQL_CA_SS_BASE+9) // dbaltcolop
#define SQL_CA_SS_COLUMN_SIZE (SQL_CA_SS_BASE+10) // dbcollen
#define SQL_CA_SS_COLUMN_HIDDEN (SQL_CA_SS_BASE+11) // Column is hidden (FOR BROWSE)
#define SQL_CA_SS_COLUMN_KEY (SQL_CA_SS_BASE+12) // Column is key column (FOR BROWSE)
// necessary for dev bug 2358, for browse clause
const ULONG MAX_SQL_CA_SS= 10;
const ULONG g_rgCOLATTRIB_SS[MAX_SQL_CA_SS]=
{
SQL_CA_SS_COLUMN_SSTYPE, // dbcoltype/dbaltcoltype
SQL_CA_SS_COLUMN_UTYPE, // dbcolutype/dbaltcolutype
SQL_CA_SS_NUM_ORDERS, // dbnumorders
SQL_CA_SS_COLUMN_ORDER, // dbcolorder
SQL_CA_SS_COLUMN_VARYLEN, // dbvarylen
SQL_CA_SS_NUM_COMPUTES, // dbnumcompute
SQL_CA_SS_COMPUTE_ID, // dbnextrow status return
SQL_CA_SS_COLUMN_SIZE, // dbcollen
SQL_CA_SS_COLUMN_HIDDEN, // Column is hidden (FOR BROWSE)
SQL_CA_SS_COLUMN_KEY // Column is key column (FOR BROWSE)
};
// necessary for dev bug 2358, compute by clause
const ULONG MAX_SQL_CA_SS_COMPUTE= 3;
const ULONG g_rgCOLATTRIB_SS_COMPUTE[MAX_SQL_CA_SS_COMPUTE]=
{
SQL_CA_SS_COMPUTE_BYLIST, // dbbylist
SQL_CA_SS_COLUMN_ID, // dbaltcolid
SQL_CA_SS_COLUMN_OP, // dbaltcolop
};
enum STATUS_ENUM
{
NO_NULLS_ALLOWED,
ALLOW_NULLS
};
enum AGGREGATION
{
NONE,
NOAGGREGATION,
AGGREGATE
};
#endif //_ICOLROW_H_