metamodel 0.2.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/metamodel.rb +2 -0
- data/lib/metamodel/command.rb +6 -2
- data/lib/metamodel/command/install.rb +52 -0
- data/lib/metamodel/config.rb +4 -0
- data/lib/metamodel/installer.rb +92 -0
- data/lib/metamodel/installer/renderer.rb +116 -0
- data/lib/metamodel/installer/validator.rb +55 -0
- data/lib/metamodel/metafile.rb +61 -0
- data/lib/metamodel/metafile/dsl.rb +44 -0
- data/lib/metamodel/record/association.rb +24 -30
- data/lib/metamodel/record/model.rb +7 -11
- data/lib/metamodel/record/property.rb +0 -4
- data/lib/metamodel/template/belongs_to_association.swift +29 -0
- data/lib/metamodel/template/has_many_association.swift +99 -0
- data/lib/metamodel/template/helper.swift +8 -6
- data/lib/metamodel/template/metamodel.swift +7 -0
- data/lib/metamodel/template/model_delete.swift +2 -5
- data/lib/metamodel/template/model_initialize.swift +6 -18
- data/lib/metamodel/template/model_query.swift +7 -3
- data/lib/metamodel/template/model_update.swift +2 -2
- data/lib/metamodel/template/static_methods.swift +1 -1
- data/lib/metamodel/template/table_initialize.swift +1 -1
- data/lib/metamodel/version.rb +1 -1
- metadata +11 -7
- data/lib/metamodel/command/build.rb +0 -148
- data/lib/metamodel/command/build/renderer.rb +0 -55
- data/lib/metamodel/command/build/resolver.rb +0 -72
- data/lib/metamodel/command/build/translator.rb +0 -66
@@ -7,16 +7,12 @@ module MetaModel
|
|
7
7
|
attr_reader :dependent
|
8
8
|
attr_accessor :major_model
|
9
9
|
attr_accessor :secondary_model
|
10
|
-
attr_accessor :through
|
11
10
|
|
12
11
|
def initialize(name, major_model, secondary_model, relation, args)
|
13
|
-
# through = args[:through]
|
14
|
-
through = nil
|
15
12
|
dependent = args[:dependent] || :nullify
|
16
13
|
|
17
14
|
@name = name.to_s.camelize :lower
|
18
15
|
@relation = relation
|
19
|
-
@through = through.to_s.camelize.singularize unless through.nil?
|
20
16
|
@dependent = dependent
|
21
17
|
@major_model = major_model
|
22
18
|
@secondary_model = secondary_model
|
@@ -24,44 +20,52 @@ module MetaModel
|
|
24
20
|
validate_association
|
25
21
|
end
|
26
22
|
|
23
|
+
def class_name
|
24
|
+
"#{major_model.name}#{secondary_model.name}Association".camelize
|
25
|
+
end
|
26
|
+
|
27
|
+
def reverse_class_name
|
28
|
+
"#{secondary_model.name}#{major_model.name}Association".camelize
|
29
|
+
end
|
30
|
+
|
31
|
+
def major_model_id
|
32
|
+
major_model.foreign_id
|
33
|
+
end
|
34
|
+
|
35
|
+
def secondary_model_id
|
36
|
+
secondary_model.foreign_id
|
37
|
+
end
|
38
|
+
|
39
|
+
def hash_value
|
40
|
+
self.hash.to_s(16)
|
41
|
+
end
|
42
|
+
|
27
43
|
def expect_constraint?(constraint)
|
28
44
|
result = true
|
29
45
|
result &= self.major_model == constraint.secondary_model
|
30
46
|
result &= self.secondary_model == constraint.major_model
|
31
|
-
result &= self.through == constraint.through
|
32
47
|
|
33
48
|
result &= case [self.relation, constraint.relation]
|
34
49
|
when [:has_one, :belongs_to], [:belongs_to, :has_one] then true
|
35
50
|
when [:belongs_to, :has_many] then
|
36
51
|
return false if self.dependent == :destroy
|
37
|
-
return true
|
38
|
-
return false
|
52
|
+
return true
|
39
53
|
when [:has_many, :belongs_to] then
|
40
54
|
return false if constraint.dependent == :destroy
|
41
|
-
return true
|
42
|
-
return false
|
55
|
+
return true
|
43
56
|
when [:has_many, :has_many] then
|
44
|
-
|
57
|
+
return true
|
45
58
|
else false
|
46
59
|
end
|
47
60
|
result
|
48
61
|
end
|
49
62
|
|
50
|
-
def secondary_model_instance
|
51
|
-
case relation
|
52
|
-
when :has_many, :has_one then "#{secondary_model.name}.find(privateId)"
|
53
|
-
when :belongs_to then "#{secondary_model.name}.find(#{secondary_model.foreign_id})"
|
54
|
-
else ""
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
63
|
#-------------------------------------------------------------------------#
|
59
64
|
|
60
65
|
# @!group Validation
|
61
66
|
|
62
67
|
def validate_association
|
63
68
|
validate_dependent(@dependent)
|
64
|
-
validate_through(@through)
|
65
69
|
end
|
66
70
|
|
67
71
|
def validate_dependent(dependent)
|
@@ -71,12 +75,6 @@ module MetaModel
|
|
71
75
|
unless supported_dependent_options.include? dependent
|
72
76
|
end
|
73
77
|
|
74
|
-
def validate_through(through)
|
75
|
-
raise Informative, "belongs_to can't coexist with through." \
|
76
|
-
if !!through && @relation == :belongs_to
|
77
|
-
end
|
78
|
-
|
79
|
-
|
80
78
|
#-------------------------------------------------------------------------#
|
81
79
|
|
82
80
|
# @!group Relation
|
@@ -100,11 +98,7 @@ module MetaModel
|
|
100
98
|
end
|
101
99
|
|
102
100
|
def debug_description
|
103
|
-
|
104
|
-
"#{major_model.name}.#{relation}.#{secondary_model.name}.through.#{through.name}.#{dependent}"
|
105
|
-
else
|
106
|
-
"#{major_model.name}.#{relation}.#{secondary_model.name}.#{dependent}"
|
107
|
-
end
|
101
|
+
"#{major_model.name}.#{relation}.#{secondary_model.name}.#{dependent}"
|
108
102
|
end
|
109
103
|
end
|
110
104
|
end
|
@@ -15,10 +15,6 @@ module MetaModel
|
|
15
15
|
@properties.select { |prop| prop.name == property }.size > 0
|
16
16
|
end
|
17
17
|
|
18
|
-
def all_foreign_properties
|
19
|
-
@properties.select { |element| element.is_foreign? }
|
20
|
-
end
|
21
|
-
|
22
18
|
def properties_exclude_id
|
23
19
|
properties_exclude_property "id"
|
24
20
|
end
|
@@ -70,19 +66,19 @@ module MetaModel
|
|
70
66
|
def build_table
|
71
67
|
table = "CREATE TABLE #{table_name}"
|
72
68
|
main_sql = @properties.map do |property|
|
73
|
-
result = "#{property.name} #{property.database_type}"
|
69
|
+
result = "#{property.name.underscore} #{property.database_type}"
|
74
70
|
result << " PRIMARY KEY" if property.is_primary?
|
75
71
|
result << " UNIQUE" if property.is_unique?
|
76
72
|
result << " DEFAULT #{property.default_value}" if property.has_default_value?
|
77
73
|
result
|
78
74
|
end
|
79
|
-
foreign_sql = @properties.map do |property|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
end
|
75
|
+
# foreign_sql = @properties.map do |property|
|
76
|
+
# next unless property.is_foreign?
|
77
|
+
# reference_table_name = property.type.tableize
|
78
|
+
# "FOREIGN KEY(#{property.name}) REFERENCES #{reference_table_name}(privateId)"
|
79
|
+
# end
|
84
80
|
|
85
|
-
table + "(
|
81
|
+
table + "(private_id INTEGER PRIMARY KEY, #{(main_sql).compact.join(", ")});"
|
86
82
|
end
|
87
83
|
|
88
84
|
private
|
@@ -0,0 +1,29 @@
|
|
1
|
+
//
|
2
|
+
// <%= association.class_name %>.swift
|
3
|
+
// MetaModel
|
4
|
+
//
|
5
|
+
// Created by MetaModel.
|
6
|
+
// Copyright © 2016 metamodel. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
import Foundation
|
10
|
+
|
11
|
+
extension <%= association.class_name %> {
|
12
|
+
static func create(<%= association.major_model_id %> <%= association.major_model_id %>: Int, <%= association.secondary_model_id %>: Int) {
|
13
|
+
executeSQL("INSERT INTO \(<%= association.class_name %>.tableName) (<%= association.major_model_id.underscore %>, <%= association.secondary_model_id.underscore %>) VALUES (\(<%= association.major_model_id %>), \(<%= association.secondary_model_id %>))")
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
public extension <%= association.major_model.name %> {
|
18
|
+
var <%= association.name %>: <%= association.secondary_model.name %>? {
|
19
|
+
get {
|
20
|
+
guard let id = <%= association.class_name %>.findBy(<%= association.major_model.foreign_id %>: privateId).first?.commentId else { return nil }
|
21
|
+
return <%= association.secondary_model.name %>.find(id)
|
22
|
+
}
|
23
|
+
set {
|
24
|
+
guard let newValue = newValue else { return }
|
25
|
+
<%= association.class_name %>.findBy(<%= association.major_model_id %>: privateId).forEach { $0.delete() }
|
26
|
+
<%= association.class_name %>.create(<%= association.major_model_id %>: newValue.privateId, <%= association.secondary_model_id %>: privateId)
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
@@ -0,0 +1,99 @@
|
|
1
|
+
//
|
2
|
+
// <%= association.class_name %>.swift
|
3
|
+
// MetaModel
|
4
|
+
//
|
5
|
+
// Created by MetaModel.
|
6
|
+
// Copyright © 2016 metamodel. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
import Foundation
|
10
|
+
|
11
|
+
typealias <%= association.reverse_class_name %> = <%= association.class_name %>
|
12
|
+
|
13
|
+
struct <%= association.class_name %> {
|
14
|
+
var privateId: Int = 0
|
15
|
+
var <%= association.major_model_id %>: Int = 0
|
16
|
+
var <%= association.secondary_model_id %>: Int = 0
|
17
|
+
|
18
|
+
enum Association: String, CustomStringConvertible {
|
19
|
+
case privateId = "private_id"
|
20
|
+
case <%= association.major_model_id %> = "<%= association.major_model_id.underscore %>"
|
21
|
+
case <%= association.secondary_model_id %> = "<%= association.secondary_model_id.underscore %>"
|
22
|
+
var description: String { get { return self.rawValue } }
|
23
|
+
}
|
24
|
+
<% [association.major_model, association.secondary_model].each do |model| %>
|
25
|
+
<%= """static func findBy(#{model.foreign_id} #{model.foreign_id}: Int) -> [#{association.class_name}] {
|
26
|
+
let query = \"SELECT * FROM \\(tableName) WHERE \\(Association.#{model.foreign_id}) = \\(#{model.foreign_id})\"
|
27
|
+
|
28
|
+
var models: [#{association.class_name}] = []
|
29
|
+
guard let stmt = executeSQL(query) else { return models }
|
30
|
+
for values in stmt {
|
31
|
+
let association = #{association.class_name}(values: values)
|
32
|
+
models.append(association)
|
33
|
+
}
|
34
|
+
return models
|
35
|
+
}""" %>
|
36
|
+
<% end %>
|
37
|
+
func delete() {
|
38
|
+
executeSQL("DELETE * FROM \(<%= association.class_name %>.tableName) WHERE \(Association.privateId) = \(privateId)")
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
extension <%= association.class_name %> {
|
43
|
+
static func create(<%= association.major_model_id %> <%= association.major_model_id %>: Int, <%= association.secondary_model_id %>: Int) {
|
44
|
+
executeSQL("INSERT INTO \(<%= association.class_name %>.tableName) (<%= association.major_model_id.underscore %>, <%= association.secondary_model_id.underscore %>) VALUES (\(<%= association.major_model_id %>), \(<%= association.secondary_model_id %>))")
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
extension <%= association.class_name %> {
|
49
|
+
init(values: Array<Optional<Binding>>) {
|
50
|
+
let privateId: Int64 = values[0] as! Int64
|
51
|
+
let <%= association.major_model_id %>: Int64 = values[1] as! Int64
|
52
|
+
let <%= association.secondary_model_id %>: Int64 = values[2] as! Int64
|
53
|
+
|
54
|
+
self.init(privateId: Int(privateId), <%= association.major_model_id %>: Int(<%= association.major_model_id %>), <%= association.secondary_model_id %>: Int(<%= association.secondary_model_id %>))
|
55
|
+
}
|
56
|
+
}
|
57
|
+
|
58
|
+
extension <%= association.class_name %> {
|
59
|
+
|
60
|
+
static let tableName = "<%= association.class_name.underscore %>"
|
61
|
+
static func initialize() {
|
62
|
+
let initializeTableSQL = "CREATE TABLE \(tableName)(" +
|
63
|
+
"private_id INTEGER PRIMARY KEY, " +
|
64
|
+
"<%= association.major_model_id.underscore %> INTEGER NOT NULL, " +
|
65
|
+
"<%= association.secondary_model_id.underscore %> INTEGER NOT NULL, " +
|
66
|
+
"FOREIGN KEY(<%= association.major_model_id.underscore %>) REFERENCES <%= association.major_model.table_name %>(private_id)," +
|
67
|
+
"FOREIGN KEY(<%= association.secondary_model_id.underscore %>) REFERENCES <%= association.secondary_model.table_name %>(private_id)" +
|
68
|
+
");"
|
69
|
+
|
70
|
+
executeSQL(initializeTableSQL)
|
71
|
+
}
|
72
|
+
static func deinitialize() {
|
73
|
+
let dropTableSQL = "DROP TABLE \(tableName)"
|
74
|
+
executeSQL(dropTableSQL)
|
75
|
+
}
|
76
|
+
}
|
77
|
+
|
78
|
+
public extension <%= association.major_model.name %> {
|
79
|
+
var <%= association.name %>: [<%= association.secondary_model.name %>] {
|
80
|
+
get {
|
81
|
+
let ids = <%= association.class_name %>.findBy(<%= association.major_model_id %>: privateId).map { $0.<%= association.secondary_model_id %> }
|
82
|
+
return <%= association.secondary_model.name %>.find(ids).result
|
83
|
+
}
|
84
|
+
set {
|
85
|
+
<%= association.class_name %>.findBy(<%= association.major_model_id %>: privateId).forEach { $0.delete() }
|
86
|
+
newValue.forEach { <%= association.class_name %>.create(<%= association.major_model_id %>: privateId, <%= association.secondary_model_id %>: $0.privateId) }
|
87
|
+
}
|
88
|
+
}
|
89
|
+
|
90
|
+
func create<%= association.secondary_model.name %>(<%= association.secondary_model.property_key_type_pairs %>) -> <%= association.secondary_model.name %>? {
|
91
|
+
guard let result = <%= association.secondary_model.name %>.create(<%= association.secondary_model.property_key_value_pairs %>) else { return nil }
|
92
|
+
<%= association.class_name %>.create(<%= association.major_model_id %>: privateId, <%= association.secondary_model_id %>: result.privateId)
|
93
|
+
return result
|
94
|
+
}
|
95
|
+
|
96
|
+
func append<%= association.secondary_model.name %>(<%= association.secondary_model.property_key_type_pairs %>) -> <%= association.secondary_model.name %>? {
|
97
|
+
return create<%= association.secondary_model.name %>(<%= association.secondary_model.property_key_value_pairs %>)
|
98
|
+
}
|
99
|
+
}
|
@@ -1,11 +1,9 @@
|
|
1
1
|
// MAKR: - Helper
|
2
2
|
|
3
3
|
public class <%= model.relation_name %>: Relation<<%= model.name %>> {
|
4
|
-
<% model.all_foreign_properties.each do |foreign_property| %><%= """var #{foreign_property.name} = 0
|
5
|
-
"""%><% end %>
|
6
4
|
override init() {
|
7
5
|
super.init()
|
8
|
-
self.select = "SELECT \(<%= model.name %>.tableName
|
6
|
+
self.select = "SELECT \(<%= model.name %>.tableName).* FROM \(<%= model.name %>.tableName)"
|
9
7
|
}
|
10
8
|
|
11
9
|
override var result: [<%= model.name %>] {
|
@@ -20,7 +18,7 @@ public class <%= model.relation_name %>: Relation<<%= model.name %>> {
|
|
20
18
|
}
|
21
19
|
|
22
20
|
func expandColumn(column: <%= model.name %>.Column) -> String {
|
23
|
-
return "\(<%= model.name %>.tableName
|
21
|
+
return "\(<%= model.name %>.tableName).\(column)"
|
24
22
|
}
|
25
23
|
}
|
26
24
|
|
@@ -36,7 +34,7 @@ extension <%= model.name %> {
|
|
36
34
|
}
|
37
35
|
|
38
36
|
extension <%= model.name %> {
|
39
|
-
var itself: String { get { return "WHERE \(<%= model.name %>.tableName
|
37
|
+
var itself: String { get { return "WHERE \(<%= model.name %>.tableName).private_id = \(privateId)" } }
|
40
38
|
}
|
41
39
|
|
42
40
|
extension <%= model.relation_name %> {
|
@@ -44,8 +42,12 @@ extension <%= model.relation_name %> {
|
|
44
42
|
return filter(privateId)
|
45
43
|
}
|
46
44
|
|
45
|
+
func find(privateIds: [Int]) -> Self {
|
46
|
+
return filter([.privateId: privateIds])
|
47
|
+
}
|
48
|
+
|
47
49
|
func filter(privateId: Int) -> Self {
|
48
|
-
self.filter.append("
|
50
|
+
self.filter.append("private_id = \(privateId)")
|
49
51
|
return self
|
50
52
|
}
|
51
53
|
}
|
@@ -27,5 +27,12 @@ public class MetaModel {
|
|
27
27
|
#{model.name}.initialize()
|
28
28
|
}""" %>
|
29
29
|
<% end %>
|
30
|
+
|
31
|
+
<% associations.each do |association| %><% if association.relation.to_s.start_with? "has" %><%= """if infos[#{association.class_name}.tableName] != \"#{association.hash_value}\" {
|
32
|
+
updateMetaModelTableInfos(#{association.class_name}.tableName, hashValue: \"#{association.hash_value}\")
|
33
|
+
#{association.class_name}.deinitialize()
|
34
|
+
#{association.class_name}.initialize()
|
35
|
+
}""" %>
|
36
|
+
<% end %><% end %>
|
30
37
|
}
|
31
38
|
}
|
@@ -3,11 +3,8 @@
|
|
3
3
|
public extension <%= model.name %> {
|
4
4
|
var delete: Bool {
|
5
5
|
get {
|
6
|
-
let deleteSQL = "DELETE FROM \(<%= model.name %>.tableName
|
7
|
-
executeSQL(deleteSQL)
|
8
|
-
<%= association.secondary_model_instance + "?.delete" if association.dependent == :destroy %>
|
9
|
-
<%= association.secondary_model_instance + "?.update(#{model.foreign_id}: 0)" if association.dependent == :nullify && model.contains?(model.foreign_id) %>
|
10
|
-
<% end %>
|
6
|
+
let deleteSQL = "DELETE FROM \(<%= model.name %>.tableName) \(itself)"
|
7
|
+
executeSQL(deleteSQL)
|
11
8
|
return true
|
12
9
|
}
|
13
10
|
}
|
@@ -4,11 +4,12 @@ public struct <%= model.name %> {
|
|
4
4
|
<% end %>
|
5
5
|
static let tableName = "<%= model.table_name %>"
|
6
6
|
|
7
|
-
public enum Column: String,
|
8
|
-
<% model.properties.each do |property| %><%= """case #{property.name} = \"#{property.name}\"""" %>
|
7
|
+
public enum Column: String, CustomStringConvertible {
|
8
|
+
<% model.properties.each do |property| %><%= """case #{property.name} = \"#{property.name.underscore}\"""" %>
|
9
9
|
<% end %>
|
10
|
-
case privateId = "
|
11
|
-
|
10
|
+
case privateId = "private_id"
|
11
|
+
|
12
|
+
public var description: String { get { return self.rawValue } }
|
12
13
|
}
|
13
14
|
|
14
15
|
public init(<%= model.property_key_type_pairs false %>) {
|
@@ -34,7 +35,7 @@ public struct <%= model.name %> {
|
|
34
35
|
<%= """columnsSQL.append(.#{property.name})
|
35
36
|
valuesSQL.append(#{property.name})
|
36
37
|
""" %><% end %><% end %>
|
37
|
-
let insertSQL = "INSERT INTO \(tableName
|
38
|
+
let insertSQL = "INSERT INTO \(tableName) (\(columnsSQL.map { $0.rawValue }.joinWithSeparator(", "))) VALUES (\(valuesSQL.map { $0.unwrapped }.joinWithSeparator(", ")))"
|
38
39
|
guard let _ = executeSQL(insertSQL),
|
39
40
|
let lastInsertRowId = executeScalarSQL("SELECT last_insert_rowid();") as? Int64 else { return nil }
|
40
41
|
var result = <%= model.name %>(<%= model.property_key_value_pairs %>)
|
@@ -42,16 +43,3 @@ public struct <%= model.name %> {
|
|
42
43
|
return result
|
43
44
|
}
|
44
45
|
}
|
45
|
-
|
46
|
-
public extension <%= model.relation_name %> {
|
47
|
-
<% model.all_foreign_properties.each do |property| %>
|
48
|
-
func create(<%= model.property_key_type_pairs_without_property property.name %>) -> <%= model.name %>? {
|
49
|
-
return <%= model.name %>.create(<% if model.properties_exclude_property(property).count == 0 %><%= "#{property}: property" %><% else %><%= model.property_key_value_pairs %><% end %>)
|
50
|
-
}
|
51
|
-
|
52
|
-
func append(element: <%= model.name %>) {
|
53
|
-
var element = element
|
54
|
-
element.<%= property.name %> = <%= property.name %>
|
55
|
-
}
|
56
|
-
<% end %>
|
57
|
-
}
|
@@ -29,6 +29,10 @@ public extension <%= model.name %> {
|
|
29
29
|
return <%= model.relation_name %>().find(id).first
|
30
30
|
}
|
31
31
|
|
32
|
+
static func find(ids: [Int]) -> <%= model.relation_name %> {
|
33
|
+
return <%= model.relation_name %>().find(ids)
|
34
|
+
}
|
35
|
+
|
32
36
|
static func findBy(<%= model.property_key_type_pairs(true, true) %>) -> <%= model.relation_name %> {
|
33
37
|
return <%= model.relation_name %>().findBy(<%= model.property_key_value_pairs %>)
|
34
38
|
}
|
@@ -90,13 +94,13 @@ public extension <%= model.relation_name %> {
|
|
90
94
|
}
|
91
95
|
|
92
96
|
if let value = value as? String {
|
93
|
-
filterByEqual(value
|
97
|
+
filterByEqual(value)
|
94
98
|
} else if let value = value as? Int {
|
95
99
|
filterByEqual(value)
|
96
100
|
} else if let value = value as? Double {
|
97
101
|
filterByEqual(value)
|
98
102
|
} else if let value = value as? [String] {
|
99
|
-
filterByIn(value.map { $0
|
103
|
+
filterByIn(value.map { $0 })
|
100
104
|
} else if let value = value as? [Int] {
|
101
105
|
filterByIn(value.map { $0.description })
|
102
106
|
} else if let value = value as? [Double] {
|
@@ -128,7 +132,7 @@ public extension <%= model.relation_name %> {
|
|
128
132
|
}
|
129
133
|
|
130
134
|
func orderBy(column: <%= model.name %>.Column, asc: Bool) -> Self {
|
131
|
-
self.order.append("\(expandColumn(column)) \(asc ? "ASC"
|
135
|
+
self.order.append("\(expandColumn(column)) \(asc ? "ASC" : "DESC")")
|
132
136
|
return self
|
133
137
|
}
|
134
138
|
}
|
@@ -13,11 +13,11 @@ public extension <%= model.name %> {
|
|
13
13
|
if let attributes = attributes as? [<%= model.name %>.Column: Unwrapped] {
|
14
14
|
for (key, value) in attributes {
|
15
15
|
switch key {
|
16
|
-
<% model.properties_exclude_id.each do |property| %><%= """case .#{property.name}: setSQL.append(\"\\(key
|
16
|
+
<% model.properties_exclude_id.each do |property| %><%= """case .#{property.name}: setSQL.append(\"\\(key) = \\(value.unwrapped)\")""" %>
|
17
17
|
<% end %>default: break
|
18
18
|
}
|
19
19
|
}
|
20
|
-
let updateSQL = "UPDATE \(<%= model.name %>.tableName
|
20
|
+
let updateSQL = "UPDATE \(<%= model.name %>.tableName) SET \(setSQL.joinWithSeparator(", ")) \(itself)"
|
21
21
|
executeSQL(updateSQL) {
|
22
22
|
for (key, value) in attributes {
|
23
23
|
switch key {
|