version 1.2, 2001/12/13 14:54:45
|
version 1.3, 2002/01/11 17:41:58
|
|
|
| |
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
#include <Pegasus/Common/Exception.h> | #include <Pegasus/Common/Exception.h> |
|
#include <Pegasus/Common/Destroyer.h> |
#include <iostream> | #include <iostream> |
#include "WQLParser.h" | #include "WQLParser.h" |
#include "WQLParserState.h" | #include "WQLParserState.h" |
|
|
WQLParserState* globalParserState = 0; | WQLParserState* globalParserState = 0; |
| |
void WQLParser::parse( | void WQLParser::parse( |
const Array<Sint8>& text, |
const char* text, |
WQLSelectStatement& statement) | WQLSelectStatement& statement) |
{ | { |
if (text.size() == 0 || text[text.size() - 1] != '\0') |
if (!text) |
throw MissingNullTerminator(); |
throw NullPointer(); |
|
|
|
statement.clear(); |
| |
globalParserState = new WQLParserState; | globalParserState = new WQLParserState; |
globalParserState->error = false; | globalParserState->error = false; |
globalParserState->text = text; | globalParserState->text = text; |
|
globalParserState->textSize = strlen(text) + 1; |
globalParserState->offset = 0; | globalParserState->offset = 0; |
globalParserState->statement = &statement; | globalParserState->statement = &statement; |
| |
|
|
delete globalParserState; | delete globalParserState; |
} | } |
| |
|
void WQLParser::parse( |
|
const Array<Sint8>& text, |
|
WQLSelectStatement& statement) |
|
{ |
|
if (text.size() == 0 || text[text.size() - 1] != '\0') |
|
throw MissingNullTerminator(); |
|
|
|
parse(text.getData(), statement); |
|
} |
|
|
|
void WQLParser::parse( |
|
const String& text, |
|
WQLSelectStatement& statement) |
|
{ |
|
char* tmpText = text.allocateCString(); |
|
ArrayDestroyer<char> destroyer(tmpText); |
|
parse(tmpText, statement); |
|
} |
|
|
void WQLParser::cleanup() | void WQLParser::cleanup() |
{ | { |
Array<char*>& arr = globalParserState->outstandingStrings; | Array<char*>& arr = globalParserState->outstandingStrings; |
|
|
// | // |
| |
int remaining = | int remaining = |
globalParserState->text.size() - globalParserState->offset - 1; |
globalParserState->textSize - globalParserState->offset - 1; |
| |
if (remaining == 0) | if (remaining == 0) |
{ | { |
|
|
numRequested = remaining; | numRequested = remaining; |
| |
memcpy(buffer, | memcpy(buffer, |
globalParserState->text.getData() + globalParserState->offset, |
globalParserState->text + globalParserState->offset, |
numRequested); | numRequested); |
| |
globalParserState->offset += numRequested; | globalParserState->offset += numRequested; |