File: schema_migration.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (51 lines) | stat: -rw-r--r-- 1,237 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# frozen_string_literal: true

module ClickHouse
  module MigrationSupport
    class SchemaMigration
      def initialize(connection, table_name: 'schema_migrations')
        @connection = connection
        @table_name = table_name
      end

      def ensure_table
        return if connection.table_exists?(table_name)

        query = <<~SQL
          CREATE TABLE #{table_name} (
            version LowCardinality(String),
            active UInt8 NOT NULL DEFAULT 1,
            applied_at DateTime64(6, 'UTC') NOT NULL DEFAULT now64()
          )
          ENGINE = ReplacingMergeTree(applied_at)
          PRIMARY KEY(version)
          ORDER BY (version)
        SQL

        connection.execute(query)
      end

      def all_versions
        query = <<~SQL
          SELECT version FROM #{table_name} FINAL
          WHERE active = 1
          ORDER BY (version)
        SQL

        connection.select(query).pluck('version')
      end

      def create!(**args)
        insert_sql = <<~SQL
          INSERT INTO #{table_name} (#{args.keys.join(',')}) VALUES (#{args.values.join(',')})
        SQL

        connection.execute(insert_sql)
      end

      private

      attr_reader :connection, :table_name
    end
  end
end