717 lines
27 KiB
C
717 lines
27 KiB
C
//--------------------------------------------------------------------
|
|
// Microsoft OLE DB Test
|
|
//
|
|
// Copyright 1995-2000 Microsoft Corporation.
|
|
//
|
|
// @doc
|
|
//
|
|
// @module IMDWPAR.H | Header file for ICommandWithParameters test module.
|
|
//
|
|
// @rev 01 | 02-04-96 | Microsoft | Created
|
|
// @rev 02 | 12-01-96 | Microsoft | Updated
|
|
//
|
|
|
|
#ifndef _ICMDWPAR_H_
|
|
#define _ICMDWPAR_H_
|
|
|
|
#include "oledb.h" // OLE DB Header Files
|
|
#include "oledberr.h"
|
|
|
|
#include "privlib.h" //include private library, which includes
|
|
#include "stddef.h" // offsetof
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Defines
|
|
//-----------------------------------------------------------------------------
|
|
#define TOTAL_NUMBER_OF_ROWS 30 // Total number of rows in the table.
|
|
#define NOT_TOUCHED_ORD 210 // "Not touched" ordinal value
|
|
#define NO_LONG_COLS 0
|
|
#define INCLUDE_LONG_COLS 1
|
|
#define MAX_STD_TYPE_NAME 30 // Max length of a standard type name for SetParameterInfo
|
|
#define MAX_STMT_BUF 1024 // Max length for SQL Stmt buffer
|
|
#define MAX_MSG_LEN 255
|
|
#define MAX_LTOW 33
|
|
#define RELCMP_NULL_VARIANT 2 // Since variants may be null internally we need
|
|
// a way to recognize that.
|
|
|
|
#define OUT_PARAM_STATUS_INVALID 99
|
|
#define OUT_PARAM_LENGTH_INVALID LONG_MAX-5;
|
|
|
|
#define EXPAND(x) x, L#x
|
|
#define IS_BASE_TYPE(wType, wBaseType) (((wType) & ~(DBTYPE_ARRAY|DBTYPE_BYREF|DBTYPE_VECTOR)) == (wBaseType))
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// ENUM
|
|
//-----------------------------------------------------------------------------
|
|
enum SPPARAMETERTYPE_ENUM {
|
|
INPUT_ONLY,
|
|
OUTPUT_ONLY,
|
|
INPUT_OUTPUT,
|
|
RETURN_VALUE_TYPE,
|
|
MAX_NUM_PARAMS,
|
|
MAX_NUM_PARAMSPLUS2,
|
|
DEFAULT_PARAM
|
|
|
|
};
|
|
|
|
enum SPDATAVALUES_ENUM {
|
|
VALID_IN_OUT_DATA,
|
|
VALID_IN_NULL_OUT_DATA,
|
|
NULL_IN_VALID_OUT_DATA,
|
|
NULL_IN_OUT_DATA
|
|
};
|
|
|
|
enum SPBINDING_ENUM {
|
|
NULL_STATUS_ONLY,
|
|
STATUS_ONLY,
|
|
LENGTH_VALUE_ONLY,
|
|
VALUE_STATUS_ONLY,
|
|
VALUE_ONLY,
|
|
LENGTH_VALUE_STATUS,
|
|
PASS_BYREF,
|
|
REVERSE_BIND
|
|
};
|
|
|
|
enum SPPARAMNAMES_ENUM {
|
|
NO_PARAMNAMES,
|
|
REGULAR_PARAMNAMES,
|
|
VERY_LONG_PARAMNAMES
|
|
};
|
|
|
|
enum NAME_ENUM {
|
|
ALL_VALID_NAMES,
|
|
ALL_INVALID_NAMES, // Control characters
|
|
SOME_INVALID_NAMES, // Odd names are invalid
|
|
ALL_NULL_NAMES,
|
|
ALL_EMPTY_STRING_NAMES
|
|
};
|
|
|
|
//This enumeration represents various objects that can be
|
|
//obtained from Execute. For e.g., TC_Row represents the Test
|
|
//Case which will test getting a ROW object (mostly) from Execute.
|
|
enum ETESTCASE
|
|
{
|
|
TC_Rowset = 1, //Getting Rowset
|
|
TC_Row, //Getting Row
|
|
};
|
|
|
|
|
|
const ULONG SP_TEXT_BLOCK_SIZE = 40000;
|
|
const ULONG SP_MAX_PARAMNAME_LENGTH = 128;
|
|
const ULONG SP_MAX_NUM_PARAMS = 255;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// String constants
|
|
//-----------------------------------------------------------------------------
|
|
// These strings are stored procedure statements specific to SQL SERVER (odbc)
|
|
// Syntax: drop procedure <procedure name>
|
|
|
|
// Create stored procedure.
|
|
// Syntax: Create procedure <procedure name>
|
|
// <parametername type [OUTPUT]>,
|
|
// <.......>,
|
|
// <.......>
|
|
// as
|
|
// SQL statements
|
|
// SQL statements
|
|
// Returns a rowset.
|
|
// Sql statements for TYPEMISMATCH and OVERFLOW test cases.
|
|
const WCHAR g_wszInsertInvalidValue[] = L"Insert into %s values ( ? )";
|
|
const WCHAR g_wszMultiInsertInvalidValue[] = L"Insert into %s values ( ?,? )";
|
|
const WCHAR g_wszInsertInvalidChar[] = L"Insert into %s values ( ? )";
|
|
const WCHAR g_wszNotSqlServerOrNoOutParams[]= L"Not running against known provider/dbms or Output parameters or not supported\n";
|
|
|
|
|
|
// ----------------------------------------------------------------------
|
|
// All the following variables are for SetParameterInfo::Variation
|
|
// Just moved them here so that they won't clutter the variation.
|
|
// ----------------------------------------------------------------------
|
|
struct tagStdTypes
|
|
{
|
|
WCHAR wszStdTypeName[MAX_STD_TYPE_NAME];
|
|
DBTYPE wType;
|
|
DBPARAMBINDINFO rgParamBindInfo[1];
|
|
} g_rgStdParamBindInfo[] =
|
|
{
|
|
// Bind info
|
|
// Std Type Name DBTYPE Type Name ulParamSize dwFlags bPrecision bScale
|
|
L"DBTYPE_I1", DBTYPE_I1, { NULL, NULL, 1, DBPARAMFLAGS_ISSIGNED, (BYTE)3, (BYTE)0 },
|
|
L"DBTYPE_I2", DBTYPE_I2, { NULL, NULL, 2, DBPARAMFLAGS_ISSIGNED, (BYTE)5, (BYTE)0 },
|
|
L"DBTYPE_I4", DBTYPE_I4, { NULL, NULL, 4, DBPARAMFLAGS_ISSIGNED, (BYTE)10, (BYTE)0 },
|
|
L"DBTYPE_I8", DBTYPE_I8, { NULL, NULL, 8, DBPARAMFLAGS_ISSIGNED, (BYTE)19, (BYTE)0 },
|
|
L"DBTYPE_UI1", DBTYPE_UI1, { NULL, NULL, 1, DBPARAMFLAGS_ISSIGNED, (BYTE)3, (BYTE)0 },
|
|
L"DBTYPE_UI2", DBTYPE_UI2, { NULL, NULL, 2, DBPARAMFLAGS_ISSIGNED, (BYTE)5, (BYTE)0 },
|
|
L"DBTYPE_UI4", DBTYPE_UI4, { NULL, NULL, 4, DBPARAMFLAGS_ISSIGNED, (BYTE)10, (BYTE)0 },
|
|
L"DBTYPE_UI8", DBTYPE_UI8, { NULL, NULL, 8, DBPARAMFLAGS_ISSIGNED, (BYTE)19, (BYTE)0 },
|
|
L"DBTYPE_R4", DBTYPE_R4, { NULL, NULL, 4, DBPARAMFLAGS_ISSIGNED, (BYTE)7, (BYTE)~0 },
|
|
L"DBTYPE_R8", DBTYPE_R8, { NULL, NULL, 8, DBPARAMFLAGS_ISSIGNED, (BYTE)15, (BYTE)~0 },
|
|
L"DBTYPE_CY", DBTYPE_CY, { NULL, NULL, 8, DBPARAMFLAGS_ISSIGNED, 19, 4 },
|
|
L"DBTYPE_DECIMAL", DBTYPE_DECIMAL, { NULL, NULL, 19, DBPARAMFLAGS_ISSIGNED, (BYTE)28, (BYTE)0 },
|
|
L"DBTYPE_NUMERIC", DBTYPE_NUMERIC, { NULL, NULL, 19, DBPARAMFLAGS_ISSIGNED, 25, 4 },
|
|
L"DBTYPE_BOOL", DBTYPE_BOOL, { NULL, NULL, 2, DBPARAMFLAGS_ISSIGNED, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_ERROR", DBTYPE_ERROR, { NULL, NULL, 4, DBPARAMFLAGS_ISSIGNED, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_UDT", DBTYPE_UDT, { NULL, NULL, 4, DBPARAMFLAGS_ISSIGNED, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_VARIANT", DBTYPE_VARIANT, { NULL, NULL, sizeof(VARIANT), DBPARAMFLAGS_ISSIGNED, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_IDISPATCH", DBTYPE_IDISPATCH, { NULL, NULL, sizeof(IDispatch *), DBPARAMFLAGS_ISSIGNED, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_IUNKNOWN", DBTYPE_IUNKNOWN, { NULL, NULL, sizeof(IUnknown *), DBPARAMFLAGS_ISSIGNED, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_GUID", DBTYPE_GUID, { NULL, NULL, sizeof(GUID), DBPARAMFLAGS_ISSIGNED, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_DATE", DBTYPE_DATE, { NULL, NULL, 6, DBPARAMFLAGS_ISSIGNED, (BYTE)23, (BYTE)3 },
|
|
L"DBTYPE_DBDATE", DBTYPE_DBDATE, { NULL, NULL, 6, DBPARAMFLAGS_ISSIGNED, (BYTE)23, (BYTE)3 },
|
|
L"DBTYPE_DBTIME", DBTYPE_DBTIME, { NULL, NULL, 6, DBPARAMFLAGS_ISSIGNED, (BYTE)23, (BYTE)3 },
|
|
L"DBTYPE_DBTIMESTAMP", DBTYPE_DBTIMESTAMP, { NULL, NULL, 16, DBPARAMFLAGS_ISSIGNED, (BYTE)23, (BYTE)3 },
|
|
L"DBTYPE_BSTR", DBTYPE_BSTR, { NULL, NULL, 500, DBPARAMFLAGS_ISSIGNED, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_CHAR", DBTYPE_STR, { NULL, NULL, 50, DBPARAMFLAGS_ISSIGNED, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_VARCHAR", DBTYPE_STR, { NULL, NULL, 500, DBPARAMFLAGS_ISSIGNED, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_LONGVARCHAR", DBTYPE_STR, { NULL, NULL, 5000, DBPARAMFLAGS_ISSIGNED|DBPARAMFLAGS_ISLONG, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_WCHAR", DBTYPE_WSTR, { NULL, NULL, 50, DBPARAMFLAGS_ISSIGNED, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_WVARCHAR", DBTYPE_WSTR, { NULL, NULL, 500, DBPARAMFLAGS_ISSIGNED, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_WLONGVARCHAR", DBTYPE_WSTR, { NULL, NULL, 5000, DBPARAMFLAGS_ISSIGNED|DBPARAMFLAGS_ISLONG, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_BINARY", DBTYPE_BYTES, { NULL, NULL, 50, DBPARAMFLAGS_ISSIGNED, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_VARBINARY", DBTYPE_BYTES, { NULL, NULL, 500, DBPARAMFLAGS_ISSIGNED, (BYTE)~0, (BYTE)~0 },
|
|
L"DBTYPE_LONGVARBINARY", DBTYPE_BYTES, { NULL, NULL, 5000, DBPARAMFLAGS_ISSIGNED|DBPARAMFLAGS_ISLONG, (BYTE)~0, (BYTE)~0 }
|
|
};
|
|
|
|
const ULONG g_cStdParams = NUMELEM(g_rgStdParamBindInfo);
|
|
|
|
|
|
struct tagParamFlags {
|
|
DBPARAMFLAGS dwFlag;
|
|
WCHAR * pwszFlagName;
|
|
} g_rgParamFlags[] =
|
|
{
|
|
EXPAND(DBPARAMFLAGS_ISINPUT),
|
|
EXPAND(DBPARAMFLAGS_ISOUTPUT),
|
|
EXPAND(DBPARAMFLAGS_ISSIGNED),
|
|
EXPAND(DBPARAMFLAGS_ISNULLABLE),
|
|
EXPAND(DBPARAMFLAGS_ISLONG),
|
|
EXPAND(DBPARAMFLAGS_SCALEISNEGATIVE)
|
|
};
|
|
|
|
|
|
//----------------------------------------------------------------------------------------
|
|
// Use our own WCSDUP instead of _wcsdup
|
|
//----------------------------------------------------------------------------------------
|
|
inline WCHAR *
|
|
WCSDUP (IMalloc *pIAlloc, WCHAR * pwszStr)
|
|
{
|
|
WCHAR *ptr=NULL;
|
|
|
|
// If pwsz is not null.
|
|
if (pwszStr)
|
|
{
|
|
ptr = (WCHAR *)pIAlloc->Alloc(sizeof(WCHAR)*wcslen(pwszStr) + sizeof(WCHAR));
|
|
|
|
// If ptr is not null copy the string else return NULL;
|
|
if (ptr)
|
|
wcscpy(ptr, pwszStr);
|
|
}
|
|
return ptr;
|
|
}
|
|
|
|
#define MAX_SQL 250
|
|
#define MAX_PROVIDER_NAME 100
|
|
#define MAX_DBMS_NAME 100
|
|
#define MAX_LONG_VALUE 200001L //5000000L // 5 MBytes
|
|
#define BOUNDARY_VALUE 65535L // 64K
|
|
#define MAX_DATA_BUF MAX_LONG_VALUE+1
|
|
#define MAX_COMMAND_BUF 1000
|
|
#define FILL_VALUE 0x01
|
|
#define MAX_ORDER_LIST 16 // Max number of columns in an order by clause
|
|
|
|
enum PARAM_OBJECT_TEST
|
|
{
|
|
VALID_INPUT_DATA,
|
|
NULL_STORAGE_OBJECT,
|
|
EMPTY_STORAGE_OBJECT,
|
|
NULL_DATA,
|
|
DEFAULT_DATA,
|
|
MULTIPLE_OBJECTS,
|
|
NON_BLOCKING_OBJECTS,
|
|
VALID_OUTPUT_DATA,
|
|
VALID_INOUT_DATA,
|
|
ZOMBIE_OBJECT,
|
|
NULL_POBJECT,
|
|
BADSTORAGEFLAGS,
|
|
NO_VALUE_BINDING
|
|
};
|
|
|
|
// The following error conditions require the stream to
|
|
// remain active, that is not be released.
|
|
enum ACTIVE_ERROR
|
|
{
|
|
INVALIDARG_MULTRES,
|
|
INVALIDARG_NULL_PDATA,
|
|
INVALIDARG_CPARAMSETS_ZERO,
|
|
BADACCESSORHANDLE,
|
|
BADACCESSORTYPE,
|
|
ERRORSOCCURRED,
|
|
NOINTERFACE,
|
|
BADBINDINFO,
|
|
BADORDINAL,
|
|
BADSTORAGEFLAGS_ERR,
|
|
UNSUPPORTEDCONVERSION,
|
|
NOAGGREGATION_OLEDB1,
|
|
NOAGGREGATION_NOT_IUNKOWN,
|
|
NOCOMMAND,
|
|
OBJECTOPEN,
|
|
LAST_ACTIVE_ERROR // Must remain last enum value
|
|
};
|
|
|
|
|
|
enum CREATE_FLAGS
|
|
{
|
|
NO_FLAGS=0,
|
|
CREATE_LONG_NAMES=1, // Param names longer than max
|
|
CREATE_MAX_NAMES=2 // Param names equal max
|
|
};
|
|
|
|
enum COMPARE_OP
|
|
{
|
|
CP_EQ,
|
|
CP_GT,
|
|
CP_LT,
|
|
CP_ISNULL,
|
|
CP_ISNOTNULL
|
|
};
|
|
|
|
enum PROVIDER_ENUM
|
|
{
|
|
MSDASQL,
|
|
SQLOLEDB,
|
|
MSDAORA,
|
|
MSDAORA8,
|
|
UNKNOWN_PROVIDER // This must be the last enum in the list
|
|
};
|
|
|
|
enum DBMS_ENUM
|
|
{
|
|
MS_SQL_SERVER,
|
|
ORACLE,
|
|
// MS_ACCESS,
|
|
UNKNOWN_DBMS // This must be the last enum in the list
|
|
};
|
|
|
|
enum VERIFY_ENUM
|
|
{
|
|
VERIFY_USE_TABLE,
|
|
VERIFY_USE_PDATA,
|
|
VERIFY_NULL,
|
|
VERIFY_NONE
|
|
};
|
|
|
|
enum ROWSET_ENUM
|
|
{
|
|
ROWSET_NONE,
|
|
ROWSET_MAYBE,
|
|
ROWSET_ALWAYS
|
|
};
|
|
|
|
enum DIALECT_ENUM
|
|
{
|
|
ORA_SQL, // ANSI SQL
|
|
SS_SQL, // SQL Server SQL
|
|
JET_SQL // JET Engine SQL
|
|
};
|
|
|
|
enum TOKEN_ENUM
|
|
{
|
|
T_COL_LIST,
|
|
T_CREATE_PROC,
|
|
T_CREATE_PROC_RET,
|
|
T_CREATE_PROC_INSERT_IN,
|
|
T_CREATE_PROC_SELECT_IN,
|
|
T_CREATE_PROC_SELECT_IN_RET,
|
|
T_CREATE_PROC_SELECT_INOUT,
|
|
T_CREATE_PROC_SELECT_LOOKUP,
|
|
T_CREATE_PROC_SELECT_NO_PARM,
|
|
T_CREATE_PROC_SELECT_OUT,
|
|
T_CREATE_PROC_SELECT_OUT_DFLT,
|
|
T_CREATE_PROC_SELECT_OUT_NULL,
|
|
T_CREATE_PROC_SELECT_OUT_RET,
|
|
T_DATA_VAL,
|
|
T_DEFAULT,
|
|
T_DROP,
|
|
T_DROP_FUN,
|
|
T_DROP_FUNC,
|
|
T_DROP_PROC,
|
|
T_EMPTY,
|
|
T_EQUALS,
|
|
T_EXEC,
|
|
T_EXEC_PROC_DELETE,
|
|
T_EXEC_PROC_DELETE_RET,
|
|
T_EXEC_PROC_INSERT_INPUT,
|
|
T_EXEC_PROC_INSERT_INPUT_RET,
|
|
T_EXEC_PROC_SELECT_IN,
|
|
T_EXEC_PROC_SELECT_IN_RET,
|
|
T_EXEC_PROC_SELECT_INOUT,
|
|
T_EXEC_PROC_SELECT_INOUT_RET,
|
|
T_EXEC_PROC_SELECT_LOOKUP,
|
|
T_EXEC_PROC_SELECT_NO_PARM,
|
|
T_EXEC_PROC_SELECT_OUT,
|
|
T_EXEC_PROC_SELECT_OUT_DFLT,
|
|
T_EXEC_PROC_SELECT_OUT_NULL,
|
|
T_EXEC_PROC_SELECT_OUT_RET,
|
|
T_EXEC_PROC_UPDATE_INPUT,
|
|
T_EXEC_PROC_UPDATE_INPUT_RET,
|
|
T_EXEC_RET,
|
|
T_FIRST_COL_EQ_PARM,
|
|
T_FIRST_PARM,
|
|
T_INTO,
|
|
T_INSERT,
|
|
T_INSERT_IN,
|
|
T_INSERT_IN_MARKER,
|
|
T_LOOKUP_PARM_EQ_LIST,
|
|
T_LOOKUP_PARM_INTO,
|
|
T_LOOKUP_WHERE_EQ,
|
|
T_NO_LONG_COL_LIST,
|
|
T_NO_LONG_COL_ORDER_LIST,
|
|
T_NO_LONG_PARM_DEF_LIST,
|
|
T_NO_LONG_PARM_DEF_LIST_DFLT,
|
|
T_NO_LONG_PARM_DEF_LIST_PAREN,
|
|
T_NO_LONG_PARM_DEF_LIST_DFLT_PAREN,
|
|
T_NO_LONG_PARM_EQ_LIST,
|
|
T_NO_LONG_PARM_LIST,
|
|
T_NO_LONG_PARM_MARKER_EQ_LIST,
|
|
// T_NO_LONG_PARM_MARKER_EQ_LIST_PAREN,
|
|
T_NO_LONG_PARM_MARKER_LIST,
|
|
T_NO_LONG_PARM_MARKER_LIST_PAREN,
|
|
T_NONE,
|
|
T_NULL_COL_LIST,
|
|
T_NULL_PARM_EQ_LIST,
|
|
T_OFFSET_NO_LONG_COL_LIST,
|
|
T_OFFSET_NO_LONG_PARM_EQ_LIST,
|
|
T_OFFSET_NO_LONG_PARM_MARKER_EQ_LIST,
|
|
// T_OFFSET_NO_LONG_PARM_MARKER_EQ_LIST_PAREN,
|
|
T_OFFSET_PARM_INTO,
|
|
T_OFFSET_PARM_INTO_MARKER,
|
|
T_OFFSET_SEARCHABLE_COL_EQ_PARM,
|
|
T_OFFSET_WHERE_EQ,
|
|
T_ORDER,
|
|
T_ORDER_CLAUSE,
|
|
T_ORDER_COL,
|
|
T_PAREN,
|
|
T_PARM_DEF,
|
|
T_PARM_DEF_IN,
|
|
T_PARM_DEF_INOUT,
|
|
T_PARM_DEF_LIST,
|
|
T_PARM_DEF_OUT,
|
|
T_PARM_DEFAULT,
|
|
T_PARM_EQ,
|
|
T_PARM_IN,
|
|
T_PARM_INOUT,
|
|
T_PARM_INTO,
|
|
T_PARM_INTO_MARKER,
|
|
T_PARM_MARKER,
|
|
T_PARM_MARKER_LIST,
|
|
T_PARM_MARKER_LIST_DFLT,
|
|
T_PARM_MARKER_LIST_RET,
|
|
T_PARM_MARKER_LIST_PAREN,
|
|
T_PARM_MARKER_LIST_DFLT_PAREN,
|
|
T_PARM_MARKER_LIST_RET_PAREN,
|
|
T_PARM_NAME,
|
|
T_PARM_NAME_FMT,
|
|
T_PARM_NULL,
|
|
T_PARM_OUT,
|
|
T_PARM_SIZE,
|
|
T_PARM_TYPE,
|
|
T_PROC_NAME,
|
|
T_RET_DEF,
|
|
T_RET_NAME,
|
|
T_RET_TYPE,
|
|
T_RET_TYPE_NAME,
|
|
T_RET_VAL,
|
|
T_ROOT,
|
|
T_SEARCHABLE_COL_EQ,
|
|
T_SEARCHABLE_COL_EQ_PARM,
|
|
T_SEARCHABLE_COL_EQ_PARM_MARKER,
|
|
T_SEARCHABLE_PARM_MARKER_LIST,
|
|
T_SEARCHABLE_PARM_MARKER_LIST_PAREN,
|
|
T_SECOND_COL,
|
|
T_SELECT_IN,
|
|
T_SELECT_IN_MARKER,
|
|
T_SELECT_INOUT,
|
|
T_SELECT_INOUT_MARKER,
|
|
T_SELECT_LOOKUP,
|
|
T_SELECT_NO_PARM,
|
|
T_SELECT_NULL,
|
|
T_SELECT_OUT,
|
|
T_SELECT_OUT_MARKER,
|
|
T_SELECT_OUT_NULL_MARKER,
|
|
T_SELECT_UNIQUE,
|
|
T_SELECT_UNIQUE_ALL,
|
|
T_SELECT_WHERE,
|
|
T_TABLE_NAME,
|
|
T_UNIQUE_NO_LONG_PARM_EQ_LIST,
|
|
T_UNIQUE_SEARCHABLE_COL_EQ_PARM,
|
|
T_UNIQUE_SEARCHABLE_COL_EQ_PARM_MARKER,
|
|
T_UNIQUE_WHERE_EQ,
|
|
T_UNIQUE_WHERE_EQ_MARKER,
|
|
T_UPDATABLE_COL_LIST,
|
|
T_UPDATABLE_PARM_DEF_LIST,
|
|
T_UPDATABLE_PARM_DEF_LIST_PAREN,
|
|
T_UPDATABLE_PARM_LIST,
|
|
T_UPDATABLE_PARM_MARKER_LIST,
|
|
T_UPDATABLE_PARM_MARKER_LIST_PAREN,
|
|
T_WHERE,
|
|
T_WHERE_ALL,
|
|
T_WHERE_EQ,
|
|
T_WHERE_EQ_MARKER
|
|
};
|
|
|
|
typedef struct tagDialect
|
|
{
|
|
enum PROVIDER_ENUM eProvider;
|
|
enum DBMS_ENUM eDBMS;
|
|
enum DIALECT_ENUM eDialect;
|
|
} Dialects;
|
|
|
|
const Dialects g_Dialects[] =
|
|
{
|
|
MSDAORA, ORACLE, ORA_SQL,
|
|
MSDAORA8, ORACLE, ORA_SQL,
|
|
// MSDASQL, MS_ORACLE, ORA_SQL,
|
|
MSDASQL, MS_SQL_SERVER, SS_SQL,
|
|
SQLOLEDB, MS_SQL_SERVER, SS_SQL,
|
|
// MSDASQL, MS_ACCESS, JET_SQL,
|
|
// JOLT, MS_ACCESS, JET_SQL
|
|
UNKNOWN_PROVIDER, UNKNOWN_DBMS, ORA_SQL // This must be the last enum in the list
|
|
};
|
|
|
|
typedef struct tagDialectTokens
|
|
{
|
|
enum DIALECT_ENUM eDialect; // Dialect in use
|
|
enum TOKEN_ENUM eToken; // The token we want
|
|
ULONG cTokens; // Made up of this number of other tokens
|
|
enum TOKEN_ENUM rgeTokens[20]; // Other tokens in proper order
|
|
WCHAR * pwszTokenString; // String for this token or NULL if none
|
|
} DialectTokens;
|
|
|
|
const DialectTokens g_DialectTokens[] =
|
|
{
|
|
// Token
|
|
// Dialect String to create Count Token list, or required string. NULL for root token we know how to build
|
|
|
|
// Syntax items we need to be able to create for testing
|
|
|
|
// For testing input and output params in same proc
|
|
ORA_SQL, T_CREATE_PROC_SELECT_OUT, 4, {T_CREATE_PROC, T_PROC_NAME, T_NO_LONG_PARM_DEF_LIST_PAREN, T_SELECT_OUT}, NULL,
|
|
ORA_SQL, T_EXEC_PROC_SELECT_OUT, 3, {T_EXEC, T_PROC_NAME, T_PARM_MARKER_LIST_PAREN}, NULL,
|
|
ORA_SQL, T_SELECT_OUT_MARKER, 4, {T_SELECT_WHERE, T_TABLE_NAME, T_PARM_INTO_MARKER, T_WHERE_EQ_MARKER}, NULL,
|
|
|
|
// For testing no params
|
|
ORA_SQL, T_CREATE_PROC_SELECT_NO_PARM,4, {T_CREATE_PROC, T_PROC_NAME, T_EMPTY, T_SELECT_NO_PARM}, NULL,
|
|
ORA_SQL, T_EXEC_PROC_SELECT_NO_PARM, 3, {T_EXEC, T_PROC_NAME, T_EMPTY}, NULL,
|
|
// ORA_SQL, T_SELECT_NO_PARM, 4, {T_SELECT_WHERE, T_TABLE_NAME, T_COL_LIST, T_EMPTY}, NULL,
|
|
|
|
// For testing input only params
|
|
ORA_SQL, T_CREATE_PROC_SELECT_IN, 4, {T_CREATE_PROC, T_PROC_NAME, T_NO_LONG_PARM_DEF_LIST_PAREN, T_SELECT_IN}, NULL,
|
|
ORA_SQL, T_EXEC_PROC_SELECT_IN, 3, {T_EXEC, T_PROC_NAME, T_PARM_MARKER_LIST_PAREN}, NULL,
|
|
ORA_SQL, T_SELECT_IN_MARKER, 4, {T_SELECT_WHERE, T_TABLE_NAME, T_COL_LIST, T_WHERE_EQ_MARKER}, NULL,
|
|
|
|
// For testing in/out params
|
|
ORA_SQL, T_CREATE_PROC_SELECT_INOUT, 4, {T_CREATE_PROC, T_PROC_NAME, T_NO_LONG_PARM_DEF_LIST_PAREN, T_SELECT_INOUT}, NULL,
|
|
ORA_SQL, T_EXEC_PROC_SELECT_INOUT, 3, {T_EXEC, T_PROC_NAME, T_PARM_MARKER_LIST_PAREN}, NULL,
|
|
ORA_SQL, T_SELECT_INOUT_MARKER, 5, {T_SELECT_UNIQUE, T_TABLE_NAME, T_PARM_INTO_MARKER, T_UNIQUE_WHERE_EQ_MARKER, T_NO_LONG_COL_ORDER_LIST}, NULL,
|
|
|
|
// For testing return params
|
|
ORA_SQL, T_CREATE_PROC_SELECT_OUT_RET,6, {T_CREATE_PROC_RET, T_PROC_NAME, T_NO_LONG_PARM_DEF_LIST_PAREN, T_SELECT_OUT, T_RET_TYPE, T_RET_VAL}, NULL,
|
|
ORA_SQL, T_EXEC_PROC_SELECT_OUT_RET, 4, {T_EXEC_RET, T_PROC_NAME, T_PARM_MARKER_LIST_RET_PAREN, T_PARM_MARKER}, NULL,
|
|
|
|
// For proving we can return a NULL on top of a valid input param
|
|
ORA_SQL, T_CREATE_PROC_SELECT_LOOKUP,4, {T_CREATE_PROC, T_PROC_NAME, T_NO_LONG_PARM_DEF_LIST_PAREN, T_SELECT_LOOKUP}, NULL,
|
|
ORA_SQL, T_EXEC_PROC_SELECT_LOOKUP, 3, {T_EXEC, T_PROC_NAME, T_PARM_MARKER_LIST_PAREN}, NULL,
|
|
|
|
// For proving we can return a NULL when status-only is bound
|
|
ORA_SQL, T_CREATE_PROC_SELECT_OUT_NULL,4,{T_CREATE_PROC, T_PROC_NAME, T_NO_LONG_PARM_DEF_LIST_PAREN, T_SELECT_NULL}, NULL,
|
|
ORA_SQL, T_EXEC_PROC_SELECT_OUT_NULL,3, {T_EXEC, T_PROC_NAME, T_PARM_MARKER_LIST_PAREN}, NULL,
|
|
ORA_SQL, T_SELECT_OUT_NULL_MARKER, 4, {T_SELECT_WHERE, T_TABLE_NAME, T_PARM_INTO_MARKER, T_WHERE_EQ_MARKER}, NULL,
|
|
|
|
// For testing input and output params in same proc using a default param
|
|
ORA_SQL, T_CREATE_PROC_SELECT_OUT_DFLT,4,{T_CREATE_PROC, T_PROC_NAME, T_NO_LONG_PARM_DEF_LIST_DFLT_PAREN, T_SELECT_OUT}, NULL,
|
|
ORA_SQL, T_EXEC_PROC_SELECT_OUT_DFLT,3, {T_EXEC, T_PROC_NAME, T_PARM_MARKER_LIST_DFLT_PAREN}, NULL,
|
|
// Can't have default params in a statement, only a procedure.
|
|
// ORA_SQL, T_SELECT_OUT_MARKER_DFLT, 4, {T_SELECT_WHERE, T_TABLE_NAME, T_PARM_INTO_MARKER, T_WHERE_EQ_MARKER}, NULL,
|
|
|
|
// For testing of insert statements
|
|
ORA_SQL, T_CREATE_PROC_INSERT_IN, 4, {T_CREATE_PROC, T_PROC_NAME, T_UPDATABLE_PARM_DEF_LIST_PAREN, T_INSERT_IN}, NULL,
|
|
ORA_SQL, T_EXEC_PROC_INSERT_INPUT, 3, {T_EXEC, T_PROC_NAME, T_UPDATABLE_PARM_MARKER_LIST_PAREN}, NULL,
|
|
ORA_SQL, T_INSERT_IN_MARKER, 4, {T_INSERT, T_TABLE_NAME, T_UPDATABLE_COL_LIST, T_UPDATABLE_PARM_MARKER_LIST}, NULL,
|
|
|
|
// To drop the procedure or function when done
|
|
ORA_SQL, T_DROP_PROC, 2, {T_DROP, T_PROC_NAME}, NULL,
|
|
ORA_SQL, T_DROP_FUNC, 2, {T_DROP_FUN, T_PROC_NAME}, NULL,
|
|
|
|
|
|
/*
|
|
// TODO: Add logic for create proc, stmt with markers, etc, for the following types
|
|
ORA_SQL, T_EXEC_PROC_UPDATE_INPUT, ?, {?, ?, }, NULL,
|
|
ORA_SQL, T_EXEC_PROC_DELETE_INPUT, ?, {?, ?, }, NULL,
|
|
ORA_SQL, T_EXEC_PROC_SELECT_BETWEEN, ?, {?, ?, }, NULL,
|
|
ORA_SQL, T_EXEC_PROC_SELECT_IN, ?, {?, ?, }, NULL,
|
|
*/
|
|
|
|
// Partial strings used to build up other strings
|
|
ORA_SQL, T_SELECT_OUT, 4, {T_SELECT_WHERE, T_TABLE_NAME, T_PARM_INTO, T_WHERE_EQ}, NULL,
|
|
ORA_SQL, T_SELECT_NULL, 4, {T_SELECT_WHERE, T_TABLE_NAME, T_PARM_NULL, T_WHERE_EQ}, NULL,
|
|
ORA_SQL, T_SELECT_NO_PARM, 4, {T_SELECT_WHERE, T_TABLE_NAME, T_COL_LIST, T_ORDER_CLAUSE}, NULL,
|
|
ORA_SQL, T_SELECT_IN, 4, {T_SELECT_WHERE, T_TABLE_NAME, T_COL_LIST, T_WHERE_EQ}, NULL,
|
|
ORA_SQL, T_SELECT_INOUT, 5, {T_SELECT_UNIQUE, T_TABLE_NAME, T_PARM_INTO, T_UNIQUE_WHERE_EQ, T_NO_LONG_COL_ORDER_LIST}, NULL,
|
|
ORA_SQL, T_SELECT_LOOKUP, 4, {T_SELECT_WHERE, T_TABLE_NAME, T_LOOKUP_PARM_INTO, T_LOOKUP_WHERE_EQ}, NULL,
|
|
ORA_SQL, T_SELECT_UNIQUE_ALL, 5, {T_SELECT_UNIQUE, T_TABLE_NAME, T_NO_LONG_COL_LIST, T_WHERE_ALL, T_NO_LONG_COL_ORDER_LIST}, NULL,
|
|
ORA_SQL, T_WHERE_EQ, 2, {T_WHERE, T_SEARCHABLE_COL_EQ_PARM},NULL,
|
|
ORA_SQL, T_LOOKUP_WHERE_EQ, 2, {T_WHERE, T_FIRST_COL_EQ_PARM},NULL,
|
|
ORA_SQL, T_OFFSET_WHERE_EQ, 2, {T_WHERE, T_OFFSET_SEARCHABLE_COL_EQ_PARM},NULL,
|
|
ORA_SQL, T_UNIQUE_WHERE_EQ, 2, {T_WHERE, T_UNIQUE_SEARCHABLE_COL_EQ_PARM},NULL,
|
|
ORA_SQL, T_WHERE_EQ_MARKER, 2, {T_WHERE, T_SEARCHABLE_COL_EQ_PARM_MARKER},NULL,
|
|
ORA_SQL, T_UNIQUE_WHERE_EQ_MARKER, 2, {T_WHERE, T_UNIQUE_SEARCHABLE_COL_EQ_PARM_MARKER},NULL,
|
|
ORA_SQL, T_PARM_INTO, 3, {T_INTO, T_NO_LONG_COL_LIST, T_NO_LONG_PARM_LIST}, NULL,
|
|
ORA_SQL, T_PARM_NULL, 3, {T_INTO, T_NULL_COL_LIST, T_NO_LONG_PARM_LIST}, NULL,
|
|
ORA_SQL, T_LOOKUP_PARM_INTO, 3, {T_INTO, T_SECOND_COL, T_FIRST_PARM}, NULL,
|
|
ORA_SQL, T_OFFSET_PARM_INTO, 3, {T_INTO, T_OFFSET_NO_LONG_COL_LIST, T_NO_LONG_PARM_LIST}, NULL,
|
|
ORA_SQL, T_PARM_INTO_MARKER, 3, {T_INTO, T_NO_LONG_COL_LIST, T_NO_LONG_PARM_MARKER_LIST}, NULL,
|
|
ORA_SQL, T_OFFSET_PARM_INTO_MARKER, 3, {T_INTO, T_OFFSET_NO_LONG_COL_LIST, T_NO_LONG_PARM_MARKER_LIST}, NULL,
|
|
ORA_SQL, T_PARM_DEF_IN, 5, {T_PARM_DEF, T_PARM_NAME, T_PARM_IN, T_PARM_TYPE, T_DEFAULT}, NULL,
|
|
ORA_SQL, T_PARM_DEF_OUT, 5, {T_PARM_DEF, T_PARM_NAME, T_PARM_OUT, T_PARM_TYPE, T_EMPTY}, NULL,
|
|
ORA_SQL, T_PARM_DEF_INOUT, 5, {T_PARM_DEF, T_PARM_NAME, T_PARM_INOUT, T_PARM_TYPE, T_EMPTY}, NULL,
|
|
ORA_SQL, T_DEFAULT, 2, {T_PARM_DEFAULT, T_DATA_VAL}, NULL,
|
|
ORA_SQL, T_UPDATABLE_PARM_DEF_LIST_PAREN,2, {T_PAREN, T_UPDATABLE_PARM_DEF_LIST}, NULL,
|
|
ORA_SQL, T_NO_LONG_PARM_DEF_LIST_PAREN, 2, {T_PAREN, T_NO_LONG_PARM_DEF_LIST}, NULL,
|
|
ORA_SQL, T_NO_LONG_PARM_DEF_LIST_DFLT_PAREN,2, {T_PAREN, T_NO_LONG_PARM_DEF_LIST_DFLT}, NULL,
|
|
ORA_SQL, T_NO_LONG_PARM_MARKER_LIST_PAREN, 2, {T_PAREN, T_NO_LONG_PARM_MARKER_LIST}, NULL,
|
|
// ORA_SQL, T_NO_LONG_PARM_MARKER_EQ_LIST_PAREN,2,{T_PAREN, T_NO_LONG_PARM_MARKER_EQ_LIST}, NULL,
|
|
// ORA_SQL, T_OFFSET_NO_LONG_PARM_MARKER_EQ_LIST_PAREN ,2,{T_PAREN, T_OFFSET_NO_LONG_PARM_MARKER_EQ_LIST}, NULL,
|
|
ORA_SQL, T_PARM_MARKER_LIST_PAREN, 2, {T_PAREN, T_PARM_MARKER_LIST}, NULL,
|
|
ORA_SQL, T_PARM_MARKER_LIST_DFLT_PAREN, 2, {T_PAREN, T_PARM_MARKER_LIST_DFLT}, NULL,
|
|
ORA_SQL, T_PARM_MARKER_LIST_RET_PAREN, 2, {T_PAREN, T_PARM_MARKER_LIST_RET}, NULL,
|
|
ORA_SQL, T_SEARCHABLE_PARM_MARKER_LIST_PAREN,2,{T_PAREN, T_SEARCHABLE_PARM_MARKER_LIST}, NULL,
|
|
ORA_SQL, T_UPDATABLE_PARM_MARKER_LIST_PAREN,2, {T_PAREN, T_UPDATABLE_PARM_MARKER_LIST}, NULL,
|
|
ORA_SQL, T_ORDER_CLAUSE, 2, {T_ORDER, T_ORDER_COL}, NULL,
|
|
ORA_SQL, T_INSERT_IN, 4, {T_INSERT, T_TABLE_NAME, T_UPDATABLE_COL_LIST, T_UPDATABLE_PARM_LIST}, NULL,
|
|
|
|
// Root syntax that is merely returned and not composed of other tokens
|
|
ORA_SQL, T_WHERE, 0, {T_ROOT}, L"where %1",
|
|
ORA_SQL, T_WHERE_ALL, 0, {T_ROOT}, L"where 1=1",
|
|
ORA_SQL, T_SELECT_WHERE, 0, {T_ROOT}, L"select %2 from %1 %3",
|
|
ORA_SQL, T_SELECT_UNIQUE, 0, {T_ROOT}, L"select distinct %2 from %1 %3 order by %4",
|
|
ORA_SQL, T_CREATE_PROC, 0, {T_ROOT}, L"create procedure %1%2 as begin %3; end;",
|
|
ORA_SQL, T_CREATE_PROC_RET, 0, {T_ROOT}, L"create function %1%2 return %4 as begin %3; return(%5); end;",
|
|
ORA_SQL, T_INTO, 0, {T_ROOT}, L"%1 into %2",
|
|
ORA_SQL, T_INSERT, 0, {T_ROOT}, L"insert into %1(%2) values (%3)",
|
|
ORA_SQL, T_EQUALS, 0, {T_ROOT}, L"%1 = %2",
|
|
ORA_SQL, T_PARM_NAME_FMT, 0, {T_ROOT}, L"%1",
|
|
ORA_SQL, T_PARM_MARKER, 0, {T_ROOT}, L"?",
|
|
ORA_SQL, T_EXEC, 0, {T_ROOT}, L"{call %1 %2}",
|
|
ORA_SQL, T_EXEC_RET, 0, {T_ROOT}, L"{%3=call %1 %2}",
|
|
ORA_SQL, T_DROP, 0, {T_ROOT}, L"drop procedure %1",
|
|
ORA_SQL, T_DROP_FUN, 0, {T_ROOT}, L"drop function %1",
|
|
ORA_SQL, T_PARM_DEF, 0, {T_ROOT}, L"%1 %2 %3 %4",
|
|
ORA_SQL, T_PARM_IN, 0, {T_ROOT}, L"IN",
|
|
ORA_SQL, T_PARM_OUT, 0, {T_ROOT}, L"OUT",
|
|
ORA_SQL, T_PARM_INOUT, 0, {T_ROOT}, L"IN OUT",
|
|
ORA_SQL, T_RET_NAME, 0, {T_ROOT}, L"RETURN_VALUE",
|
|
ORA_SQL, T_RET_TYPE_NAME, 0, {T_ROOT}, L"DBTYPE_CHAR",
|
|
ORA_SQL, T_PARM_DEFAULT, 0, {T_ROOT}, L":= %1",
|
|
ORA_SQL, T_PAREN, 0, {T_ROOT}, L"(%1)",
|
|
ORA_SQL, T_ORDER, 0, {T_ROOT}, L"order by %1",
|
|
ORA_SQL, T_EMPTY, 0, {T_ROOT}, L" ",
|
|
|
|
// Provider specific syntax
|
|
SS_SQL, T_SELECT_OUT, 4, {T_SELECT_WHERE, T_TABLE_NAME, T_NO_LONG_PARM_EQ_LIST, T_WHERE_EQ}, NULL,
|
|
SS_SQL, T_SELECT_NULL, 4, {T_SELECT_WHERE, T_TABLE_NAME, T_NULL_PARM_EQ_LIST, T_WHERE_EQ}, NULL,
|
|
SS_SQL, T_SELECT_INOUT, 5, {T_SELECT_UNIQUE, T_TABLE_NAME, T_NO_LONG_PARM_EQ_LIST, T_UNIQUE_WHERE_EQ, T_NO_LONG_COL_ORDER_LIST}, NULL,
|
|
SS_SQL, T_SELECT_LOOKUP, 4, {T_SELECT_WHERE, T_TABLE_NAME, T_LOOKUP_PARM_EQ_LIST, T_LOOKUP_WHERE_EQ}, NULL,
|
|
SS_SQL, T_SELECT_INOUT_MARKER, 5, {T_SELECT_UNIQUE, T_TABLE_NAME, T_NO_LONG_PARM_MARKER_EQ_LIST, T_UNIQUE_WHERE_EQ_MARKER, T_NO_LONG_COL_ORDER_LIST}, NULL,
|
|
SS_SQL, T_SELECT_OUT_MARKER, 4, {T_SELECT_WHERE, T_TABLE_NAME, T_NO_LONG_PARM_MARKER_EQ_LIST, T_WHERE_EQ_MARKER}, NULL,
|
|
SS_SQL, T_PARM_NAME_FMT, 0, {T_ROOT}, L"@%1",
|
|
SS_SQL, T_PARM_DEF, 0, {T_ROOT}, L"%1 %2%3%4 %5",
|
|
SS_SQL, T_PARM_DEF_IN, 6, {T_PARM_DEF, T_PARM_NAME, T_PARM_TYPE, T_PARM_SIZE, T_DEFAULT, T_PARM_IN}, NULL,
|
|
SS_SQL, T_PARM_DEF_OUT, 6, {T_PARM_DEF, T_PARM_NAME, T_PARM_TYPE, T_PARM_SIZE, T_DEFAULT, T_PARM_OUT}, NULL,
|
|
SS_SQL, T_PARM_DEF_INOUT, 6, {T_PARM_DEF, T_PARM_NAME, T_PARM_TYPE, T_PARM_SIZE, T_DEFAULT, T_PARM_INOUT}, NULL,
|
|
SS_SQL, T_PARM_IN, 0, {T_ROOT}, L"",
|
|
SS_SQL, T_PARM_OUT, 0, {T_ROOT}, L"OUTPUT",
|
|
SS_SQL, T_PARM_INOUT, 0, {T_ROOT}, L"OUTPUT",
|
|
SS_SQL, T_CREATE_PROC_RET, 0, {T_ROOT}, L"create procedure %1%2 as begin %3 return(%4) end",
|
|
SS_SQL, T_DROP_FUN, 0, {T_ROOT}, L"drop procedure %1",
|
|
SS_SQL, T_CREATE_PROC_SELECT_OUT_RET,5, {T_CREATE_PROC_RET, T_PROC_NAME, T_NO_LONG_PARM_DEF_LIST_PAREN, T_SELECT_OUT, T_RET_VAL}, NULL,
|
|
SS_SQL, T_RET_TYPE_NAME, 0, {T_ROOT}, L"DBTYPE_I4",
|
|
SS_SQL, T_LOOKUP_PARM_EQ_LIST, 3, {T_EQUALS, T_FIRST_PARM, T_SECOND_COL}, NULL,
|
|
SS_SQL, T_PARM_DEFAULT, 0, {T_ROOT}, L"= %1",
|
|
SS_SQL, T_RET_NAME, 0, {T_ROOT}, L"@RETURN_VALUE",
|
|
|
|
JET_SQL, T_DROP, 0, {T_ROOT}, L"drop table \"%1\"",
|
|
|
|
// Special strings we know how to create given the table and possibly the bindings
|
|
ORA_SQL, T_SEARCHABLE_COL_EQ, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_UPDATABLE_COL_LIST, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_COL_LIST, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_NULL_COL_LIST, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_NO_LONG_COL_LIST, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_NO_LONG_COL_ORDER_LIST, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_OFFSET_NO_LONG_COL_LIST, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_NO_LONG_PARM_LIST, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_NO_LONG_PARM_DEF_LIST, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_NO_LONG_PARM_DEF_LIST_DFLT,0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_NO_LONG_PARM_MARKER_LIST, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_NO_LONG_PARM_MARKER_EQ_LIST,0,{T_ROOT}, NULL,
|
|
ORA_SQL, T_OFFSET_NO_LONG_PARM_MARKER_EQ_LIST,0,{T_ROOT}, NULL,
|
|
ORA_SQL, T_NO_LONG_PARM_EQ_LIST, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_NULL_PARM_EQ_LIST, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_OFFSET_NO_LONG_PARM_EQ_LIST,0,{T_ROOT}, NULL,
|
|
ORA_SQL, T_UNIQUE_NO_LONG_PARM_EQ_LIST,0,{T_ROOT}, NULL,
|
|
ORA_SQL, T_SEARCHABLE_COL_EQ_PARM, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_OFFSET_SEARCHABLE_COL_EQ_PARM,0,{T_ROOT}, NULL,
|
|
ORA_SQL, T_UNIQUE_SEARCHABLE_COL_EQ_PARM,0,{T_ROOT}, NULL,
|
|
ORA_SQL, T_SEARCHABLE_COL_EQ_PARM_MARKER,0,{T_ROOT},NULL,
|
|
ORA_SQL, T_UNIQUE_SEARCHABLE_COL_EQ_PARM_MARKER,0,{T_ROOT},NULL,
|
|
ORA_SQL, T_PROC_NAME, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_PARM_NAME, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_PARM_TYPE, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_PARM_SIZE, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_TABLE_NAME, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_PARM_MARKER_LIST, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_PARM_MARKER_LIST_DFLT, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_PARM_MARKER_LIST_RET, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_SEARCHABLE_PARM_MARKER_LIST,0,{T_ROOT}, NULL,
|
|
ORA_SQL, T_UPDATABLE_PARM_MARKER_LIST,0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_UPDATABLE_PARM_DEF_LIST, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_UPDATABLE_PARM_LIST, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_RET_DEF, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_RET_TYPE, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_RET_VAL, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_SECOND_COL, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_FIRST_PARM, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_FIRST_COL_EQ_PARM, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_DATA_VAL, 0, {T_ROOT}, NULL,
|
|
ORA_SQL, T_ORDER_COL, 0, {T_ROOT}, NULL
|
|
};
|
|
|
|
typedef struct tagProviderList
|
|
{
|
|
enum PROVIDER_ENUM eProvider;
|
|
WCHAR wszProviderName[MAX_PROVIDER_NAME];
|
|
} ProviderList;
|
|
|
|
const ProviderList g_ProviderList[] =
|
|
{
|
|
// MSDASQL, L"Microsoft OLE DB Provider for ODBC Drivers", // Kagera 1.1
|
|
MSDASQL, L"MSDASQL.DLL", // Chinook (Kagera 1.5)
|
|
SQLOLEDB, L"sqloledb.dll",
|
|
MSDAORA, L"MSDAORA.DLL",
|
|
MSDAORA8, L"MSDAORA8.DLL"
|
|
};
|
|
|
|
typedef struct tagDBMSList
|
|
{
|
|
enum DBMS_ENUM eDBMS;
|
|
WCHAR wszDBMSName[MAX_DBMS_NAME];
|
|
} DBMSList;
|
|
|
|
const DBMSList g_DBMSList[] =
|
|
{
|
|
MS_SQL_SERVER, L"Microsoft SQL Server",
|
|
ORACLE, L"Oracle",
|
|
// MS_ACCESS, L"ACCESS",
|
|
};
|
|
|
|
#endif //_ICMDWPAR_H_
|