render method
Renders this clause to SQL text, recording any bind values on context.
context is the entire context a clause is given: use
RenderContext.escapeName for identifiers and RenderContext.param
for values.
Return an empty string to render nothing, which is how an optional clause
(such as a WHERE with no filter) drops itself from the statement.
Implementation
@override
String render(RenderContext context) {
final buffer = StringBuffer();
final f = filter;
if (f is LogicalFilter) {
if (level > 0) buffer.write('(');
buffer
..write(
FilterClause(f.left, singleTable: singleTable, level: level + 1)
.render(context),
)
..write(f.or ? ' OR ' : ' AND ')
..write(
FilterClause(f.right, singleTable: singleTable, level: level + 1)
.render(context),
);
if (level > 0) buffer.write(')');
} else if (f is SQL) {
buffer
.write(ExpressionClause(f, singleTable: singleTable).render(context));
} else if (f is Not) {
final inverted =
FilterClause(f.invert, singleTable: singleTable).render(context);
buffer.write('NOT ($inverted)');
} else if (f case final Expression<dynamic> expression) {
buffer.write(
ExpressionClause(SQL([expression]), singleTable: singleTable)
.render(context),
);
} else {
throw UnsupportedError('${f.runtimeType}');
}
return buffer.toString();
}