fix: slow find with include in mysql (#1304)
* fix: slow find with include in mysql * fix: test * fix: test * chore: console.log * chore: test
This commit is contained in:
		
							parent
							
								
									a98c9e03ce
								
							
						
					
					
						commit
						33377c7d3a
					
				@ -249,7 +249,7 @@ describe('has many repository', () => {
 | 
			
		||||
    expect(p1.title).toEqual('u1t1');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  test('find', async () => {
 | 
			
		||||
  test('find with has many', async () => {
 | 
			
		||||
    const u1 = await User.repository.create({ values: { name: 'u1' } });
 | 
			
		||||
 | 
			
		||||
    const t1 = await Tag.repository.create({ values: { name: 't1' } });
 | 
			
		||||
 | 
			
		||||
@ -269,7 +269,12 @@ export class Repository<TModelAttributes extends {} = any, TCreationAttributes e
 | 
			
		||||
          attributes: [primaryKeyField],
 | 
			
		||||
          group: `${model.name}.${primaryKeyField}`,
 | 
			
		||||
          transaction,
 | 
			
		||||
        })
 | 
			
		||||
          include: opts.include.filter((include) => {
 | 
			
		||||
            return (
 | 
			
		||||
              Object.keys(include.where || {}).length > 0 || JSON.stringify(opts?.filter)?.includes(include.association)
 | 
			
		||||
            );
 | 
			
		||||
          }),
 | 
			
		||||
        } as any)
 | 
			
		||||
      ).map((row) => {
 | 
			
		||||
        return { row, pk: row.get(primaryKeyField) };
 | 
			
		||||
      });
 | 
			
		||||
@ -278,6 +283,16 @@ export class Repository<TModelAttributes extends {} = any, TCreationAttributes e
 | 
			
		||||
        return [];
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      const templateModel = await model.findOne({
 | 
			
		||||
        ...opts,
 | 
			
		||||
        includeIgnoreAttributes: false,
 | 
			
		||||
        attributes: [primaryKeyField],
 | 
			
		||||
        group: `${model.name}.${primaryKeyField}`,
 | 
			
		||||
        transaction,
 | 
			
		||||
        limit: 1,
 | 
			
		||||
        offset: 0,
 | 
			
		||||
      } as any);
 | 
			
		||||
 | 
			
		||||
      const where = {
 | 
			
		||||
        [primaryKeyField]: {
 | 
			
		||||
          [Op.in]: ids.map((id) => id['pk']),
 | 
			
		||||
@ -297,7 +312,7 @@ export class Repository<TModelAttributes extends {} = any, TCreationAttributes e
 | 
			
		||||
            return { rows, include };
 | 
			
		||||
          });
 | 
			
		||||
        }),
 | 
			
		||||
        templateModel: ids[0].row,
 | 
			
		||||
        templateModel: templateModel,
 | 
			
		||||
      });
 | 
			
		||||
    } else {
 | 
			
		||||
      rows = await model.findAll({
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user