orange-dragonfly-orm-model-to-sql 0.7.0 → 0.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/mysql.js +28 -8
package/package.json
CHANGED
package/src/mysql.js
CHANGED
|
@@ -50,7 +50,13 @@ class OrangeDragonflyORMSchemaToMySQL {
|
|
|
50
50
|
field.push('NOT NULL')
|
|
51
51
|
}
|
|
52
52
|
if (rule.hasOwnProperty('default')) {
|
|
53
|
-
|
|
53
|
+
if (rule.default === null) {
|
|
54
|
+
field.push(`DEFAULT NULL`)
|
|
55
|
+
} else if (types.includes('boolean')) {
|
|
56
|
+
field.push(`DEFAULT ${rule.hasOwnProperty('default') ? `${rule.default ? 1 : 0}`: ''}`)
|
|
57
|
+
} else {
|
|
58
|
+
field.push(`DEFAULT ${rule.hasOwnProperty('default') ? `'${rule.default}'`: ''}`)
|
|
59
|
+
}
|
|
54
60
|
} else if (types.includes('null')) {
|
|
55
61
|
field.push('DEFAULT NULL')
|
|
56
62
|
}
|
|
@@ -79,12 +85,22 @@ class OrangeDragonflyORMSchemaToMySQL {
|
|
|
79
85
|
const indexes = {}
|
|
80
86
|
for (let rel of Object.values(model.available_relations)) {
|
|
81
87
|
if ((rel.mode === 'child') || (rel.mode === 'children')) {
|
|
82
|
-
indexes[`${rel.b.table}.${rel._b_key_by_mode}`] =
|
|
88
|
+
indexes[`${rel.b.table}.${rel._b_key_by_mode}`] = false
|
|
83
89
|
} else if ((rel.mode === 'parent')) {
|
|
84
|
-
indexes[`${rel.a.table}.${rel._a_key_by_mode}`] =
|
|
90
|
+
indexes[`${rel.a.table}.${rel._a_key_by_mode}`] = false
|
|
85
91
|
} else {
|
|
86
|
-
indexes[`${rel.class_via.table}.${rel.via_a_key}`] =
|
|
87
|
-
indexes[`${rel.b.table}.${rel._b_key_by_mode}`] =
|
|
92
|
+
indexes[`${rel.class_via.table}.${rel.via_a_key}`] = false
|
|
93
|
+
indexes[`${rel.b.table}.${rel._b_key_by_mode}`] = false
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return indexes
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
_generateUniqueIndexes(model) {
|
|
100
|
+
const indexes = {}
|
|
101
|
+
if (model.UNIQUE_KEYS) {
|
|
102
|
+
for (const fields of model.UNIQUE_KEYS) {
|
|
103
|
+
indexes[fields.map(v => `${model.table}.${v}`).join('/')] = true
|
|
88
104
|
}
|
|
89
105
|
}
|
|
90
106
|
return indexes
|
|
@@ -92,8 +108,12 @@ class OrangeDragonflyORMSchemaToMySQL {
|
|
|
92
108
|
|
|
93
109
|
_convertIndexesToSql(indexes) {
|
|
94
110
|
const queries = []
|
|
95
|
-
for (let index of Object.
|
|
96
|
-
|
|
111
|
+
for (let [index, is_unique] of Object.entries(indexes)) {
|
|
112
|
+
if (is_unique) {
|
|
113
|
+
queries.push(`CREATE UNIQUE INDEX uq_${index.replaceAll('.', '__').replaceAll('/', '___')} ON ${index.split('/')[0].split('.')[0]} (${index.split('/').map(v => v.split('.')[1]).join(', ')});`)
|
|
114
|
+
} else {
|
|
115
|
+
queries.push(`CREATE INDEX ix_${index.replace('.', '__')} ON ${index.split('.')[0]} (${index.split('.')[1]});`)
|
|
116
|
+
}
|
|
97
117
|
}
|
|
98
118
|
return queries
|
|
99
119
|
}
|
|
@@ -109,7 +129,7 @@ class OrangeDragonflyORMSchemaToMySQL {
|
|
|
109
129
|
for (const model of models) {
|
|
110
130
|
queries.push(this._generateTableSQL(model))
|
|
111
131
|
if (this._auto_indexes) {
|
|
112
|
-
Object.assign(indexes, this._generateIndexes(model))
|
|
132
|
+
Object.assign(indexes, this._generateIndexes(model), this._generateUniqueIndexes(model))
|
|
113
133
|
}
|
|
114
134
|
}
|
|
115
135
|
if (this._auto_indexes) {
|