getPgColumnDefault method

String? getPgColumnDefault(
  1. dynamic defaultValue,
  2. String tableName
)

Implementation

String? getPgColumnDefault(
  dynamic defaultValue,
  String tableName,
) {
  var defaultValueType = this.defaultValueType;
  if ((defaultValue == null) || (defaultValueType == null)) return null;

  switch (defaultValueType) {
    case DefaultValueAllowedType.dateTime:
      if (defaultValue is! String) {
        throw StateError('Invalid DateTime default value: $defaultValue');
      }

      if (defaultValue == defaultDateTimeValueNow) {
        return 'CURRENT_TIMESTAMP';
      }

      DateTime? dateTime = DateTime.parse(defaultValue);
      return '\'${DateFormat('yyyy-MM-dd HH:mm:ss').format(dateTime)}\'::timestamp without time zone';
    case DefaultValueAllowedType.bool:
      return defaultValue;
    case DefaultValueAllowedType.int:
      if (defaultValue == defaultIntSerial) {
        return "nextval('${tableName}_id_seq'::regclass)";
      }
      return '$defaultValue';
    case DefaultValueAllowedType.double:
      return '$defaultValue';
    case DefaultValueAllowedType.string:
      return '${escapeSqlString(defaultValue)}::text';
    case DefaultValueAllowedType.uuidValue:
      if (defaultUuidValueRandom == defaultValue) {
        return 'gen_random_uuid()';
      }
      if (defaultUuidValueRandomV7 == defaultValue) {
        return 'gen_random_uuid_v7()';
      }
      return '${escapeSqlString(defaultValue)}::uuid';
    case DefaultValueAllowedType.uri:
      return '${escapeSqlString(defaultValue)}::text';
    case DefaultValueAllowedType.bigInt:
      var parsedBigInt = BigInt.parse(defaultValue);
      return "'${parsedBigInt.toString()}'::text";
    case DefaultValueAllowedType.duration:
      Duration parsedDuration = parseDuration(defaultValue);
      return '${parsedDuration.toJson()}';
    case DefaultValueAllowedType.isEnum:
      var enumDefinition = this.enumDefinition;
      if (enumDefinition == null) return null;
      var values = enumDefinition.values;
      return switch (enumDefinition.serialized) {
        EnumSerialization.byIndex =>
          '${values.indexWhere((e) => e.name == defaultValue)}',
        EnumSerialization.byName => '\'$defaultValue\'::text',
      };
  }
}