Project

General

Profile

Patch #41954 » 0010-Support-omit-default-or-nil-value.patch

Ko Nagase, 2025-03-30 12:05

View differences:

lib/tasks/extract_fixtures.rake
40 40
  tables = ENV['TABLES']&.split(',') || []
41 41
  skip_tables = ENV['SKIP_TABLES']&.split(',') || []
42 42
  table_filters = ENV['TABLE_FILTERS']&.split(';')&.map {|tf| tf.split(":", 2)}&.to_h || {}
43
  omit_default_or_nil = ActiveRecord::Type::Boolean.new.cast(ENV.fetch('OMIT_DEFAULT_OR_NIL', 'false'))
43 44

  
44 45
  FileUtils.mkdir_p(dir)
45 46
  if time_offset.present? && !time_offset.match?(/^([+-](0[0-9]|1[0-4]):[0-5][0-9])$/)
......
60 61
      sql = "SELECT * FROM #{table_name} #{where_clause} ORDER BY #{order_columns}"
61 62
      data = ActiveRecord::Base.connection.select_all(sql)
62 63
      file.write data.inject({}) { |hash, record|
63
        # cast extracted values
64
        # omit default or nil values or cast extracted values with formatting time
64 65
        columns.each do |col|
65
          if record[col.name]
66
          if omit_default_or_nil && (
67
            (!col.default.nil? && !record[col.name].nil? && record[col.name].to_s == col.default) ||
68
            (col.default.nil? && record[col.name].nil?)
69
          )
70
            record.delete(col.name)
71
            next
72
          elsif record[col.name]
66 73
            record[col.name] = ActiveRecord::Type.lookup(col.type).deserialize(record[col.name])
67 74
            if col.type == :datetime && record[col.name].is_a?(Time)
68 75
              if time_offset.present?
(12-12/14)