resolveVariableValue static method

Object? resolveVariableValue(
  1. Object value,
  2. Map<String, dynamic>? variables,
  3. List<SQL>? executedSqls
)

Implementation

static Object? resolveVariableValue(
    Object value, Map<String, dynamic>? variables, List<SQL>? executedSqls) {
  if (value is List) {
    return value.map((e) {
      if (WithVariables.isVariableValue(e)) {
        return resolveVariableValue(e, variables, executedSqls);
      } else {
        return e;
      }
    }).toList();
  }

  var s = value.toString();

  if (s.startsWith('%') && s.endsWith('%')) {
    var name = s.substring(1, s.length - 1);
    var v = variables?[name];
    return v;
  } else if (s.startsWith('#') && s.endsWith('#')) {
    var ref = s.substring(1, s.length - 1);
    var refParts = ref.split(':');
    var refTable = refParts[0];
    var refSqlID = refParts[1];

    var refSql = executedSqls?.firstWhereOrNull(
        (sql) => sql.table == refTable && sql.sqlID == refSqlID);

    if (refSql != null) {
      var v = refSql.lastID ?? refSql.results;
      return v;
    }
  } else {
    var v = WithVariables.replaceVariables(s, (m) {
      var variable = m.group(1)!;
      var val = resolveVariableValue(variable, variables, executedSqls);
      return val?.toString() ?? 'null';
    });
    return v;
  }

  return null;
}