resolveLastInsertID method

Object? resolveLastInsertID(
  1. Object? id, {
  2. Map<String, dynamic>? valuesNamed,
  3. List<SQL>? executedSqls,
})

Implementation

Object? resolveLastInsertID(Object? id,
    {Map<String, dynamic>? valuesNamed, List<SQL>? executedSqls}) {
  if (id != null) {
    if (id is num) {
      if (id != 0) return id;
    } else if (id is String) {
      if (id.isNotEmpty) return id;
    }
  }

  var returnColumn = returnColumns.keys.firstOrNull;
  var val = valuesNamed?[returnColumn] ?? parameters[returnColumn];

  if (val == null) {
    return null;
  }

  if (val is int) {
    return val;
  } else if (val is List) {
    var valSQL = val.firstOrNull ?? '';

    var n = parseInt(valSQL);
    if (n != null) return n;

    if (WithVariables.isVariableValue(valSQL)) {
      valSQL = SQL.resolveVariableValue(valSQL, variables, executedSqls);
    }

    var operation =
        RegExp(r'^\s*(-?\d+)\s*([+-])\s*(-?\d+)\s*$', dotAll: true)
            .firstMatch(valSQL);

    if (operation != null) {
      var a = parseInt(operation.group(1));
      var op = operation.group(2)!;
      var b = parseInt(operation.group(3));

      if (a != null && b != null) {
        if (op == '+') {
          return a + b;
        } else if (op == '-') {
          return a - b;
        }
      }
    }

    return null;
  } else {
    return parseInt(val);
  }
}