123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- 'use strict';
- const get = require('../get');
- const utils = require('../../utils');
- module.exports = function isIndexEqual(key, options, dbIndex) {
- // If these options are different, need to rebuild the index
- const optionKeys = [
- 'unique',
- 'partialFilterExpression',
- 'sparse',
- 'expireAfterSeconds',
- 'collation'
- ];
- for (const key of optionKeys) {
- if (!(key in options) && !(key in dbIndex)) {
- continue;
- }
- if (key === 'collation') {
- const definedKeys = Object.keys(options.collation);
- const schemaCollation = options.collation;
- const dbCollation = dbIndex.collation;
- for (const opt of definedKeys) {
- if (get(schemaCollation, opt) !== get(dbCollation, opt)) {
- return false;
- }
- }
- } else if (!utils.deepEqual(options[key], dbIndex[key])) {
- return false;
- }
- }
- const schemaIndexKeys = Object.keys(key);
- const dbIndexKeys = Object.keys(dbIndex.key);
- if (schemaIndexKeys.length !== dbIndexKeys.length) {
- return false;
- }
- for (let i = 0; i < schemaIndexKeys.length; ++i) {
- if (schemaIndexKeys[i] !== dbIndexKeys[i]) {
- return false;
- }
- if (!utils.deepEqual(key[schemaIndexKeys[i]], dbIndex.key[dbIndexKeys[i]])) {
- return false;
- }
- }
- return true;
- };
|