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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/mysql.js +21 -7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orange-dragonfly-orm-model-to-sql",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "description": "Converts Orange Dragonfly validator model to SQL CREATE TABLE syntax",
5
5
  "main": "index.js",
6
6
  "repository": {
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}`] = 'index'
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}`] = 'index'
90
+ indexes[`${rel.a.table}.${rel._a_key_by_mode}`] = false
91
91
  } else {
92
- indexes[`${rel.class_via.table}.${rel.via_a_key}`] = 'index'
93
- indexes[`${rel.b.table}.${rel._b_key_by_mode}`] = 'index'
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.keys(indexes)) {
102
- queries.push(`CREATE INDEX ${indexes[index]}_${index.replace('.', '__')} ON ${index.split('.')[0]} (${index.split('.')[1]});`)
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) {