paramValuesFromObjects function

List<ParamValue> paramValuesFromObjects(
  1. List<Object?> params
)

Converts a list of objects to ParamValue instances.

Fast path: if all items are already ParamValue or null, converts and returns efficiently.

Supported implicit input types:

  • nullParamValueNull
  • ParamValue → returned as-is (fast path)
  • intParamValueInt32 or ParamValueInt64 (based on range)
  • StringParamValueString
  • List<int>ParamValueBinary
  • boolParamValueInt32(1|0) (canonical mapping)
  • doubleParamValueDecimal(value.toString()) (canonical mapping)
  • DateTimeParamValueString(value.toUtc().toIso8601String()) (canonical mapping)

Throws ArgumentError for unsupported types with actionable message.

Example:

final params = paramValuesFromObjects([1, 'hello', null]);
// Returns: [ParamValueInt32(1), ParamValueString('hello'), ParamValueNull()]

Implementation

List<ParamValue> paramValuesFromObjects(List<Object?> params) {
  // Fast path: check if all items are already ParamValue or null
  if (params.isNotEmpty) {
    var allParamValueOrNull = true;
    for (final item in params) {
      if (item != null && item is! ParamValue) {
        allParamValueOrNull = false;
        break;
      }
    }
    if (allParamValueOrNull) {
      // Fast path: convert nulls to ParamValueNull, skip other items
      final result =
          List<ParamValue>.filled(params.length, const ParamValueNull());
      for (var i = 0; i < params.length; i++) {
        final item = params[i];
        if (item is ParamValue) {
          result[i] = item;
        }
      }
      return result;
    }
  }

  // Pre-size output list for better performance
  final result = List<ParamValue>.filled(params.length, const ParamValueNull());

  for (var i = 0; i < params.length; i++) {
    result[i] = toParamValue(params[i]);
  }

  return result;
}