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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/mysql.js +23 -9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orange-dragonfly-orm-model-to-sql",
3
- "version": "0.7.4",
3
+ "version": "0.7.6",
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}`] = 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,15 @@ 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) {
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) {