feat: SQL 语法支持 BETWEEN AND、DROP TABLE IF EXISTS
This commit is contained in:
+31
-1
@@ -423,8 +423,15 @@ export class Parser {
|
||||
private parseDropTable(): DropTableStatement {
|
||||
this.expect(TokenType.DROP);
|
||||
this.expect(TokenType.TABLE);
|
||||
// IF EXISTS(可选)
|
||||
let ifExists = false;
|
||||
if (this.curTokenIs(TokenType.IF)) {
|
||||
this.nextToken();
|
||||
this.expect(TokenType.EXISTS);
|
||||
ifExists = true;
|
||||
}
|
||||
const tableName = this.expectIdentifier('table name');
|
||||
return { type: 'DROP_TABLE', name: tableName };
|
||||
return { type: 'DROP_TABLE', name: tableName, ifExists: ifExists || undefined };
|
||||
}
|
||||
|
||||
// ===================================================================
|
||||
@@ -483,6 +490,29 @@ export class Parser {
|
||||
return result;
|
||||
}
|
||||
|
||||
// BETWEEN val1 AND val2
|
||||
if (this.curTokenIs(TokenType.BETWEEN)) {
|
||||
this.nextToken();
|
||||
const low = this.parseValue();
|
||||
this.expect(TokenType.AND);
|
||||
const high = this.parseValue();
|
||||
const result: WhereCondition = {};
|
||||
result[column] = { $gte: low, $lte: high };
|
||||
return result;
|
||||
}
|
||||
|
||||
// NOT BETWEEN val1 AND val2
|
||||
if (this.curTokenIs(TokenType.NOT) && this.peekTokenIs(TokenType.BETWEEN)) {
|
||||
this.nextToken(); // skip NOT
|
||||
this.nextToken(); // skip BETWEEN
|
||||
const low = this.parseValue();
|
||||
this.expect(TokenType.AND);
|
||||
const high = this.parseValue();
|
||||
const result: WhereCondition = {};
|
||||
result[column] = { $not: { $gte: low, $lte: high } };
|
||||
return result;
|
||||
}
|
||||
|
||||
// NOT LIKE / NOT IN(NOT 后紧跟 LIKE 或 IN)
|
||||
if (this.curTokenIs(TokenType.NOT)) {
|
||||
if (this.peekTokenIs(TokenType.IN)) {
|
||||
|
||||
Reference in New Issue
Block a user