orange-dragonfly-orm-model-to-sql 0.7.5 → 0.7.7
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 +26 -10
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 || `${rel.a.table}_id`}`] =
|
|
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,17 @@ class OrangeDragonflyORMSchemaToMySQL {
|
|
|
108
118
|
|
|
109
119
|
_convertIndexesToSql(indexes) {
|
|
110
120
|
const queries = []
|
|
111
|
-
for (let [index,
|
|
112
|
-
|
|
113
|
-
|
|
121
|
+
for (let [index, indexType] of Object.entries(indexes)) {
|
|
122
|
+
const [table] = index.split('/')[0].split('.')
|
|
123
|
+
const cols = index.split('/').map((v) => v.split('.')[1])
|
|
124
|
+
if (indexType === 'unique') {
|
|
125
|
+
queries.push(`CREATE UNIQUE INDEX uq_${table}__${cols.join('__')} ON ${table} (${cols.join(', ')});`)
|
|
126
|
+
} else if (indexType === 'asc') {
|
|
127
|
+
queries.push(`CREATE INDEX ix_${table}__${cols.join('__')} ON ${table} (${cols.join(', ')});`)
|
|
128
|
+
} else if (indexType === 'fulltext') {
|
|
129
|
+
queries.push(`CREATE FULLTEXT INDEX ft_${table}__${cols.join('__')} ON ${table} (${cols.join(', ')});`)
|
|
114
130
|
} else {
|
|
115
|
-
|
|
131
|
+
throw new Error(`Unknown index type: ${indexType}`)
|
|
116
132
|
}
|
|
117
133
|
}
|
|
118
134
|
return queries
|
|
@@ -129,7 +145,7 @@ class OrangeDragonflyORMSchemaToMySQL {
|
|
|
129
145
|
for (const model of models) {
|
|
130
146
|
queries.push(this._generateTableSQL(model))
|
|
131
147
|
if (this._auto_indexes) {
|
|
132
|
-
Object.assign(indexes, this._generateIndexes(model), this._generateUniqueIndexes(model))
|
|
148
|
+
Object.assign(indexes, this._generateIndexes(model), this._generateUniqueIndexes(model), this._generateFulltextIndexes(model))
|
|
133
149
|
}
|
|
134
150
|
}
|
|
135
151
|
if (this._auto_indexes) {
|