@@ -411,52 +411,46 @@ - (void)whereKey:(NSString *)key hasSuffix:(NSString *)suffix
411411 [self whereKey: key matchesRegex: [NSString stringWithFormat: @" .*%@ $" , quote (suffix)]];
412412}
413413
414- + (LCQuery *)orQueryWithSubqueries : (NSArray *)queries
415- {
416- NSString * className = nil ;
417- NSMutableArray * input = [[NSMutableArray alloc ] initWithCapacity: queries.count];
418- for (LCQuery * query in queries)
419- {
420- [input addObject: query.where];
421-
422- // classname must be same, or will get assert
423- if (className!=nil ) {
424- NSAssert ([query.className isEqualToString: className], @" the OR query requires same classNames, but here got %@ v.s. %@ " ,className,query.className);
414+ + (LCQuery *)orQueryWithSubqueries : (NSArray <LCQuery *> *)queries {
415+ LCQuery *orQuery;
416+ NSString *firstClassName = queries.firstObject .className ;
417+ if (firstClassName) {
418+ NSMutableArray *wheres = [[NSMutableArray alloc ] initWithCapacity: queries.count];
419+ for (LCQuery *query in queries) {
420+ NSAssert ([query.className isEqualToString: firstClassName], @" the `queries` require same `className`" );
421+ if (query.where .count > 0 ) {
422+ [wheres addObject: query.where];
423+ }
425424 }
426-
427- className = query.className ;
428- }
429- LCQuery * result = [LCQuery queryWithClassName: className];
430- [result.where setValue: input forKey: @" $or" ];
431- return result;
432- }
433-
434- + (LCQuery *)andQueryWithSubqueries : (NSArray *)queries
435- {
436- if (queries.count <= 0 ) {
437- return nil ;
438- }
439-
440- NSString * className = nil ;
441- NSMutableArray * input = [[NSMutableArray alloc ] initWithCapacity: queries.count];
442- for (LCQuery * query in queries)
443- {
444- [input addObject: query.where];
445-
446- // classname must be same, or will get assert
447- if (className!=nil ) {
448- NSAssert ([query.className isEqualToString: className], @" the AND query requires same classNames, but here got %@ v.s. %@ " ,className,query.className);
425+ if (wheres.count > 0 ) {
426+ orQuery = [LCQuery queryWithClassName: firstClassName];
427+ [orQuery.where setValue: wheres forKey: @" $or" ];
449428 }
450-
451- className = query.className ;
452429 }
453- LCQuery * result = [LCQuery queryWithClassName: className];
454- if (input.count > 1 ) {
455- [result.where setValue: input forKey: @" $and" ];
456- } else {
457- [result.where addEntriesFromDictionary: [input objectAtIndex: 0 ]];
430+ return orQuery;
431+ }
432+
433+ + (LCQuery *)andQueryWithSubqueries : (NSArray <LCQuery *> *)queries {
434+ LCQuery *andQuery;
435+ NSString *firstClassName = queries.firstObject .className ;
436+ if (firstClassName) {
437+ NSMutableArray *wheres = [[NSMutableArray alloc ] initWithCapacity: queries.count];
438+ for (LCQuery *query in queries) {
439+ NSAssert ([query.className isEqualToString: firstClassName], @" the `queries` require same `className`" );
440+ if (query.where .count > 0 ) {
441+ [wheres addObject: query.where];
442+ }
443+ }
444+ if (wheres.count > 0 ) {
445+ andQuery = [LCQuery queryWithClassName: firstClassName];
446+ if (wheres.count > 1 ) {
447+ [andQuery.where setValue: wheres forKey: @" $and" ];
448+ } else {
449+ [andQuery.where addEntriesFromDictionary: wheres[0 ]];
450+ }
451+ }
458452 }
459- return result ;
453+ return andQuery ;
460454}
461455
462456// 'where={"belongTo":{"$select":{"query":{"className":"Person","where":{"gender":"Male"}},"key":"name"}}}'
0 commit comments