writeStartPart method

  1. @override
void writeStartPart(
  1. GenerationContext ctx
)
override

Subclasses must override this and write the part of the statement that comes before the where and limit expression..

Implementation

@override
void writeStartPart(GenerationContext ctx) {
  // use all columns across all tables as result column for this query
  _selectedColumns.insertAll(
      0, _queriedTables(true).expand((t) => t.$columns).cast<Expression>());

  ctx.hasMultipleTables = true;
  ctx.buffer
    ..write(_beginOfSelect(distinct))
    ..write(' ');

  for (var i = 0; i < _selectedColumns.length; i++) {
    if (i != 0) {
      ctx.buffer.write(', ');
    }

    final column = _selectedColumns[i];
    String chosenAlias;
    if (column is GeneratedColumn) {
      if (ctx.generatingForView == column.tableName) {
        chosenAlias = '${column.$name}';
      } else {
        chosenAlias = '${column.tableName}.${column.$name}';
      }
    } else {
      chosenAlias = 'c$i';
    }
    _columnAliases[column] = chosenAlias;

    column.writeInto(ctx);
    ctx.buffer
      ..write(' AS "')
      ..write(chosenAlias)
      ..write('"');
  }

  ctx.buffer.write(' FROM ${table.tableWithAlias}');
  ctx.watchedTables.add(table);

  if (_joins.isNotEmpty) {
    ctx.writeWhitespace();

    for (var i = 0; i < _joins.length; i++) {
      if (i != 0) ctx.writeWhitespace();

      _joins[i].writeInto(ctx);
    }
  }
}