buildSQL method

  1. @override
String buildSQL({
  1. bool multiline = true,
  2. bool ifNotExists = true,
})
override

Build the SQL.

Implementation

@override
String buildSQL({bool multiline = true, bool ifNotExists = true}) {
  var ln = multiline ? '\n' : '';

  final sql = StringBuffer();

  sql.write('ALTER TABLE ');
  sql.write('$q$table$q $ln');

  var maxLine = entries.map((e) => e.sql.length).max + 3;

  var i = 0;
  for (var e in entries) {
    var line = e.sql;

    if (ifNotExists) {
      var lineTrimUC =
          line.trim().toUpperCase().replaceAll(RegExp(r'\s+'), ' ');
      if (lineTrimUC.startsWith('ADD COLUMN ') &&
          !lineTrimUC.contains(' IF NOT EXISTS ')) {
        line = 'ADD COLUMN IF NOT EXISTS ${line.substring(11)}';
      }
    }

    var comment = e.comment;

    var lineLength = line.length;
    var lastEntry = i == entries.length - 1;

    sql.write(line);
    if (!lastEntry) {
      sql.write(',');
      lineLength++;
    }

    if (multiline && comment != null) {
      var pad = maxLine - lineLength;
      var space = '  '.padRight(pad, ' ');
      sql.write('$space-- $comment');
    }

    if (!lastEntry) {
      sql.write(ln);
    }

    i++;
  }

  sql.write('$ln ;');

  return sql.toString();
}