public OCommandExecutorSQLDelete() {
}
@SuppressWarnings("unchecked")
public OCommandExecutorSQLDelete parse(final OCommandRequest iRequest) {
final ODatabaseRecord database = getDatabase();
init((OCommandRequestText) iRequest);
query = null;
recordCount = 0;
parserRequiredKeyword(OCommandExecutorSQLDelete.KEYWORD_DELETE);
parserRequiredKeyword(OCommandExecutorSQLDelete.KEYWORD_FROM);
String subjectName = parserRequiredWord(false, "Syntax error", " =><,\r\n");
if (subjectName == null)
throwSyntaxErrorException("Invalid subject name. Expected cluster, class, index or sub-query");
if (OStringParser.startsWithIgnoreCase(subjectName, OCommandExecutorSQLAbstract.INDEX_PREFIX)) {
// INDEX
indexName = subjectName.substring(OCommandExecutorSQLAbstract.INDEX_PREFIX.length());
if (!parserIsEnded()) {
while (!parserIsEnded()) {
final String word = parserGetLastWord();
if (word.equals(KEYWORD_LOCK))
lockStrategy = parseLock();
else if (word.equals(KEYWORD_RETURN))
returning = parseReturn();
else if (word.equalsIgnoreCase(KEYWORD_WHERE))
compiledFilter = OSQLEngine.getInstance().parseCondition(parserText.substring(parserGetCurrentPosition()),
getContext(), KEYWORD_WHERE);
parserNextWord(true);
}
} else
parserSetCurrentPosition(-1);
} else if (subjectName.startsWith("(")) {
subjectName = subjectName.trim();
query = database.command(new OSQLAsynchQuery<ODocument>(subjectName.substring(1, subjectName.length() - 1), this));
} else {
parserNextWord(true);
while (!parserIsEnded()) {
final String word = parserGetLastWord();
if (word.equals(KEYWORD_LOCK))
lockStrategy = parseLock();
else if (word.equals(KEYWORD_RETURN))
returning = parseReturn();
else {
parserGoBack();
break;
}
parserNextWord(true);
}
final String condition = parserGetCurrentPosition() > -1 ? " " + parserText.substring(parserGetCurrentPosition()) : "";
query = database.command(new OSQLAsynchQuery<ODocument>("select from " + subjectName + condition, this));
}
return this;
}