orange-dragonfly-orm-model-to-sql 0.7.4 → 0.7.6
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 +23 -9
package/package.json
CHANGED
package/src/mysql.js
CHANGED
|
@@ -85,12 +85,12 @@ 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}`] = 'asc'
|
|
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}`] = 'asc'
|
|
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 || `${rel.a.table}_id`}`] = 'asc'
|
|
93
|
+
indexes[`${rel.b.table}.${rel._b_key_by_mode}`] = 'asc'
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
return indexes
|
|
@@ -100,7 +100,17 @@ class OrangeDragonflyORMSchemaToMySQL {
|
|
|
100
100
|
const indexes = {}
|
|
101
101
|
if (model.UNIQUE_KEYS) {
|
|
102
102
|
for (const fields of model.UNIQUE_KEYS) {
|
|
103
|
-
indexes[fields.map(v => `${model.table}.${v}`).join('/')] =
|
|
103
|
+
indexes[fields.map(v => `${model.table}.${v}`).join('/')] = 'unique'
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return indexes
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
_generateFulltextIndexes(model) {
|
|
110
|
+
const indexes = {}
|
|
111
|
+
if (model.FULLTEXT_INDEXES) {
|
|
112
|
+
for (const fields of model.FULLTEXT_INDEXES) {
|
|
113
|
+
indexes[fields.map(v => `${model.table}.${v}`).join('/')] = 'fulltext'
|
|
104
114
|
}
|
|
105
115
|
}
|
|
106
116
|
return indexes
|
|
@@ -108,11 +118,15 @@ class OrangeDragonflyORMSchemaToMySQL {
|
|
|
108
118
|
|
|
109
119
|
_convertIndexesToSql(indexes) {
|
|
110
120
|
const queries = []
|
|
111
|
-
for (let [index,
|
|
112
|
-
if (
|
|
121
|
+
for (let [index, indexType] of Object.entries(indexes)) {
|
|
122
|
+
if (indexType === 'unique') {
|
|
113
123
|
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 {
|
|
124
|
+
} else if (indexType === 'asc') {
|
|
115
125
|
queries.push(`CREATE INDEX ix_${index.replace('.', '__')} ON ${index.split('.')[0]} (${index.split('.')[1]});`)
|
|
126
|
+
} else if (indexType === 'fulltext') {
|
|
127
|
+
queries.push(`CREATE FULLTEXT INDEX ft_${index.replaceAll('.', '__').replaceAll('/', '___')} ON ${index.split('/')[0].split('.')[0]} (${index.split('/').map(v => v.split('.')[1]).join(', ')});`)
|
|
128
|
+
} else {
|
|
129
|
+
throw new Error(`Unknown index type: ${indexType}`)
|
|
116
130
|
}
|
|
117
131
|
}
|
|
118
132
|
return queries
|
|
@@ -129,7 +143,7 @@ class OrangeDragonflyORMSchemaToMySQL {
|
|
|
129
143
|
for (const model of models) {
|
|
130
144
|
queries.push(this._generateTableSQL(model))
|
|
131
145
|
if (this._auto_indexes) {
|
|
132
|
-
Object.assign(indexes, this._generateIndexes(model), this._generateUniqueIndexes(model))
|
|
146
|
+
Object.assign(indexes, this._generateIndexes(model), this._generateUniqueIndexes(model), this._generateFulltextIndexes(model))
|
|
133
147
|
}
|
|
134
148
|
}
|
|
135
149
|
if (this._auto_indexes) {
|