visitFrameSpec method
void
visitFrameSpec(
- FrameSpec e,
- void arg
)
override
Implementation
@override
void visitFrameSpec(FrameSpec e, void arg) {
void frameBoundary(FrameBoundary boundary) {
void precedingOrFollowing(bool preceding) {
if (boundary.isUnbounded) {
keyword(TokenType.unbounded);
} else {
visit(boundary.offset!, arg);
}
keyword(preceding ? TokenType.preceding : TokenType.following);
}
if (boundary.isCurrentRow) {
keyword(TokenType.current);
keyword(TokenType.row);
} else if (boundary.preceding) {
precedingOrFollowing(true);
} else {
precedingOrFollowing(false);
}
}
keyword(const {
FrameType.range: TokenType.range,
FrameType.rows: TokenType.rows,
FrameType.groups: TokenType.groups,
}[e.type!]!);
keyword(TokenType.between);
frameBoundary(e.start);
keyword(TokenType.and);
frameBoundary(e.end);
if (e.excludeMode != null) {
keyword(TokenType.exclude);
switch (e.excludeMode!) {
case ExcludeMode.noOthers:
keyword(TokenType.no);
keyword(TokenType.others);
break;
case ExcludeMode.currentRow:
keyword(TokenType.current);
keyword(TokenType.row);
break;
case ExcludeMode.group:
keyword(TokenType.group);
break;
case ExcludeMode.ties:
keyword(TokenType.ties);
break;
}
}
}