build method

  1. @protected
  2. @override
String build({
  1. String? aggregateFunction,
  2. String? aggregateColumn,
})
override

Implementation

@protected
@override
String build({String? aggregateFunction, String? aggregateColumn}) {
  final buf = StringBuffer();

  if (selectColumns.length > 1) {
    selectColumns.remove('*');
  }

  final withClause = buildWithClause();
  if (withClause.isNotEmpty) {
    buf.write(withClause);
    buf.write(' ');
  }

  final table = getTable;
  if (table.isNotEmpty) {
    if (aggregateFunction != null && aggregateColumn != null) {
      buf
        ..write('SELECT ')
        ..write(aggregateFunction)
        ..write('(')
        ..write(aggregateColumn)
        ..write(') FROM ')
        ..write(table);
    } else {
      buf.write('SELECT ');
      if (selectColumns.isEmpty) {
        buf.write('*');
      } else {
        buf.writeAll(selectColumns, ', ');
      }
      buf
        ..write(' FROM ')
        ..write(table);
    }

    if (joins.isNotEmpty) {
      buf.write(' ');
      buf.writeAll(joins, ' ');
    }
    if (conditions.isNotEmpty) {
      buf.write(' WHERE ');
      buf.writeAll(conditions, ' ');
    }

    if (unions.isNotEmpty) {
      buf.write(' ');
      buf.writeAll(unions, ' ');
    }

    if (aggregateFunction == null && aggregateColumn == null) {
      if (_groupBy.isNotEmpty) {
        buf.write(' GROUP BY ');
        buf.writeAll(_groupBy, ', ');
      }
      if (_having.isNotEmpty) {
        buf.write(' HAVING ');
        buf.writeAll(_having, ' ');
      }
      if (_orderBy.isNotEmpty) {
        buf.write(' ORDER BY ');
        buf.writeAll(_orderBy, ', ');
      }
      if (_limit != null) {
        buf
          ..write(' LIMIT ')
          ..write(_limit);
      }
      if (_offset != null) {
        buf
          ..write(' OFFSET ')
          ..write(_offset);
      }
    }
  } else if (conditions.isNotEmpty) {
    buf.writeAll(conditions, ' ');
  }

  return buf.toString().trim();
}