Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

115 lines
2.1 KiB

/*++
Copyright (C) 1998-2001 Microsoft Corporation
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