/
create_table.cr
42 lines (36 loc) · 1.13 KB
/
create_table.cr
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
module Marten
module DB
abstract class Migration
module DSL
class CreateTable
def initialize(@name : String | Symbol)
end
def build(&) : self
with self yield
self
end
def operation
Operation::CreateTable.new(
name: @name.to_s,
columns: columns,
unique_constraints: unique_constraints,
indexes: indexes
)
end
macro column(*args, **kwargs)
columns << _init_column({{ args.splat }}, {{ kwargs.double_splat }})
end
macro index(name, column_names)
indexes << _init_index({{ name }}, {{ column_names }})
end
macro unique_constraint(name, column_names)
unique_constraints << _init_unique_constraint({{ name }}, {{ column_names }})
end
private getter columns = [] of Management::Column::Base
private getter indexes = [] of Management::Index
private getter unique_constraints = [] of Management::Constraint::Unique
end
end
end
end
end