orange-dragonfly-orm-model-to-sql 0.7.2 → 0.7.3
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 +21 -7
package/package.json
CHANGED
package/src/mysql.js
CHANGED
|
@@ -85,12 +85,22 @@ class OrangeDragonflyORMSchemaToMySQL {
|
|
|
85
85
|
const indexes = {}
|
|
86
86
|
for (let rel of Object.values(model.available_relations)) {
|
|
87
87
|
if ((rel.mode === 'child') || (rel.mode === 'children')) {
|
|
88
|
-
indexes[`${rel.b.table}.${rel._b_key_by_mode}`] =
|
|
88
|
+
indexes[`${rel.b.table}.${rel._b_key_by_mode}`] = false
|
|
89
89
|
} else if ((rel.mode === 'parent')) {
|
|
90
|
-
indexes[`${rel.a.table}.${rel._a_key_by_mode}`] =
|
|
90
|
+
indexes[`${rel.a.table}.${rel._a_key_by_mode}`] = false
|
|
91
91
|
} else {
|
|
92
|
-
indexes[`${rel.class_via.table}.${rel.via_a_key}`] =
|
|
93
|
-
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
|
|
94
104
|
}
|
|
95
105
|
}
|
|
96
106
|
return indexes
|
|
@@ -98,8 +108,12 @@ class OrangeDragonflyORMSchemaToMySQL {
|
|
|
98
108
|
|
|
99
109
|
_convertIndexesToSql(indexes) {
|
|
100
110
|
const queries = []
|
|
101
|
-
for (let index of Object.
|
|
102
|
-
|
|
111
|
+
for (let [index, is_unique] of Object.entries(indexes)) {
|
|
112
|
+
if (is_unique) {
|
|
113
|
+
queries.push(`CREATE UNIQUE INDEX uq_${index.replace('.', '__').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
|
+
}
|
|
103
117
|
}
|
|
104
118
|
return queries
|
|
105
119
|
}
|
|
@@ -115,7 +129,7 @@ class OrangeDragonflyORMSchemaToMySQL {
|
|
|
115
129
|
for (const model of models) {
|
|
116
130
|
queries.push(this._generateTableSQL(model))
|
|
117
131
|
if (this._auto_indexes) {
|
|
118
|
-
Object.assign(indexes, this._generateIndexes(model))
|
|
132
|
+
Object.assign(indexes, this._generateIndexes(model), this._generateUniqueIndexes(model))
|
|
119
133
|
}
|
|
120
134
|
}
|
|
121
135
|
if (this._auto_indexes) {
|