118 lines
2.1 KiB
C
118 lines
2.1 KiB
C
|
/*++
|
||
|
|
||
|
|
||
|
|
||
|
// Copyright (c) 1998-2001 Microsoft Corporation, All Rights Reserved
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
WQLSCAN.H
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
WQL Prefix Scanner
|
||
|
|
||
|
History:
|
||
|
|
||
|
raymcc 26-Mar-98
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _WQLSCAN_H_
|
||
|
#define _WQLSCAN_H_
|
||
|
|
||
|
|
||
|
struct WSLexToken
|
||
|
{
|
||
|
int m_nToken;
|
||
|
wchar_t *m_pszTokenText;
|
||
|
|
||
|
WSLexToken() { m_pszTokenText = 0; }
|
||
|
~WSLexToken() { delete [] m_pszTokenText; }
|
||
|
};
|
||
|
|
||
|
typedef WSLexToken *PWSLexToken;
|
||
|
|
||
|
struct WSTableRef
|
||
|
{
|
||
|
wchar_t *m_pszTable;
|
||
|
wchar_t *m_pszAlias; // Can be NULL if no alias specified
|
||
|
|
||
|
WSTableRef() { m_pszTable = m_pszAlias = 0; }
|
||
|
~WSTableRef() { delete [] m_pszTable; delete [] m_pszAlias; }
|
||
|
};
|
||
|
|
||
|
typedef WSTableRef * PWSTableRef;
|
||
|
|
||
|
class CWQLScanner
|
||
|
{
|
||
|
// Data.
|
||
|
// =====
|
||
|
|
||
|
CGenLexer *m_pLexer;
|
||
|
int m_nLine;
|
||
|
wchar_t *m_pTokenText;
|
||
|
int m_nCurrentToken;
|
||
|
BOOL m_bCount;
|
||
|
|
||
|
CFlexArray m_aTokens; // Array of ptrs to WSLexToken structs.
|
||
|
CFlexArray m_aPropRefs; // Array of ptrs to SWQLColRef structs.
|
||
|
CFlexArray m_aTableRefs; // Ptrs to WSTableRef structs.
|
||
|
|
||
|
// Local functions.
|
||
|
// ==================
|
||
|
|
||
|
BOOL Next();
|
||
|
PWSLexToken ExtractNext();
|
||
|
void Pushback(PWSLexToken);
|
||
|
|
||
|
BOOL StripWhereClause();
|
||
|
BOOL SelectList();
|
||
|
BOOL ReduceSql92Joins();
|
||
|
BOOL ReduceSql89Joins();
|
||
|
BOOL ExtractSelectType();
|
||
|
|
||
|
void ClearTableRefs();
|
||
|
void ClearPropRefs();
|
||
|
void ClearTokens();
|
||
|
|
||
|
BOOL BuildSWQLColRef(
|
||
|
CFlexArray &aTokens,
|
||
|
SWQLColRef &ColRef // Empty on entry
|
||
|
);
|
||
|
|
||
|
public:
|
||
|
enum {
|
||
|
SUCCESS,
|
||
|
SYNTAX_ERROR,
|
||
|
LEXICAL_ERROR,
|
||
|
FAILED,
|
||
|
BUFFER_TOO_SMALL,
|
||
|
INVALID_PARAMETER,
|
||
|
INTERNAL_ERROR
|
||
|
};
|
||
|
|
||
|
const LPWSTR AliasToTable(LPWSTR pszAlias);
|
||
|
|
||
|
BOOL GetReferencedAliases(CWStringArray &aClasses);
|
||
|
BOOL GetReferencedTables(CWStringArray &aClasses);
|
||
|
BOOL CountQuery() {return m_bCount;}
|
||
|
|
||
|
CWQLScanner(CGenLexSource *pSrc);
|
||
|
~CWQLScanner();
|
||
|
int Parse();
|
||
|
|
||
|
void Dump();
|
||
|
|
||
|
const CFlexArray *GetSelectedColumns() { return &m_aPropRefs; }
|
||
|
// Returns pointer to array of SWQLColRef*
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
|