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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/mysql.js +26 -10
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orange-dragonfly-orm-model-to-sql",
3
- "version": "0.7.5",
3
+ "version": "0.7.7",
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,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}`] = false
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}`] = false
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`}`] = false
93
- indexes[`${rel.b.table}.${rel._b_key_by_mode}`] = false
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('/')] = true
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, 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(', ')});`)
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
- queries.push(`CREATE INDEX ix_${index.replace('.', '__')} ON ${index.split('.')[0]} (${index.split('.')[1]});`)
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) {