dartNameForSqlColumn function Null safety

String dartNameForSqlColumn(
  1. String name,
  2. {Iterable<String> existingNames = const Iterable.empty()}
)

Selects a valid Dart name for a column in SQL.

This includes:

  • stripping leaading numbers and characters that can't appear in a Dart identifier.
  • defaulting to empty if a column only consists of invalid names.
  • changing the case of the identifier to camelCase.

This transformation may map distinct SQL identifiers to the same Dart name (e.g. dartNameForSqlColumn('1a') == dartNameForSqlColumn('2a')). To generate unique names, this function can append numbers to the generated identifier to make them unique. To make use of that, pass an iterable of names already taken in existingNames.

Implementation

String dartNameForSqlColumn(String name,
    {Iterable<String> existingNames = const Iterable.empty()}) {
  // remove chars which cannot appear in dart identifiers, also strip away
  // leading digits
  var escapedName =
      name.replaceAll(_illegalChars, '').replaceFirst(_leadingDigits, '');

  if (escapedName.isEmpty) {
    escapedName = 'empty';
  }

  escapedName = ReCase(escapedName).camelCase;
  final potentialAmbiguousName = escapedName;
  var counter = 1;
  while (existingNames.contains(escapedName)) {
    escapedName = potentialAmbiguousName + counter.toString();
    counter++;
  }
  return escapedName;
}