Skip to content

Commit d20b3d7

Browse files
authored
Merge pull request #655 from zapcannon87/master
chore: tweak code
2 parents 3d33e6e + 8a5f3d4 commit d20b3d7

File tree

18 files changed

+138
-74
lines changed

18 files changed

+138
-74
lines changed

AVOS/AVOS.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@
299299
D30B6B5E24A0A03E006ABE09 /* LCSubscriber.h in Headers */ = {isa = PBXBuildFile; fileRef = 834A54811ECAF3A0006C8F4B /* LCSubscriber.h */; };
300300
D30B6B5F24A0A03E006ABE09 /* LCSubscriber.m in Sources */ = {isa = PBXBuildFile; fileRef = 834A54821ECAF3A0006C8F4B /* LCSubscriber.m */; };
301301
D30B6B6224A0A933006ABE09 /* BaseTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D30B6B6124A0A933006ABE09 /* BaseTestCase.swift */; };
302+
D313718026BBDAC200123756 /* LCQueryTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D313717F26BBDAC200123756 /* LCQueryTestCase.swift */; };
302303
D32AA480263BF2F30044E74E /* Foundation.h in Headers */ = {isa = PBXBuildFile; fileRef = D32AA47F263BF2F30044E74E /* Foundation.h */; settings = {ATTRIBUTES = (Public, ); }; };
303304
D32AA482263BF39C0044E74E /* Realtime.h in Headers */ = {isa = PBXBuildFile; fileRef = D32AA481263BF39C0044E74E /* Realtime.h */; settings = {ATTRIBUTES = (Public, ); }; };
304305
D36A095A25BEA75000A4F312 /* IMMessageTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D36A095925BEA75000A4F312 /* IMMessageTestCase.swift */; };
@@ -542,6 +543,7 @@
542543
D31126A3208F1C7A00812135 /* LCIMConversationMemberInfo_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LCIMConversationMemberInfo_Internal.h; sourceTree = "<group>"; };
543544
D3120E0823B0DA8E00A64120 /* LCRTMWebSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LCRTMWebSocket.h; sourceTree = "<group>"; };
544545
D3120E0923B0DA8E00A64120 /* LCRTMWebSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LCRTMWebSocket.m; sourceTree = "<group>"; };
546+
D313717F26BBDAC200123756 /* LCQueryTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LCQueryTestCase.swift; sourceTree = "<group>"; };
545547
D328B8E620FEE2200039091A /* LCIMClientInternalConversationManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LCIMClientInternalConversationManager.h; sourceTree = "<group>"; };
546548
D328B8E720FEE2200039091A /* LCIMClientInternalConversationManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LCIMClientInternalConversationManager.m; sourceTree = "<group>"; };
547549
D32AA47F263BF2F30044E74E /* Foundation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Foundation.h; sourceTree = "<group>"; };
@@ -1228,6 +1230,7 @@
12281230
D30B6B6024A0A932006ABE09 /* LeanCloudObjcTests-Bridging-Header.h */,
12291231
D30B6B6124A0A933006ABE09 /* BaseTestCase.swift */,
12301232
D3AD74AA24BC216200D1BBEE /* LCUserTestCase.swift */,
1233+
D313717F26BBDAC200123756 /* LCQueryTestCase.swift */,
12311234
D39724C324A5CD3C0099A518 /* RTMBaseTestCase.swift */,
12321235
D3A397F024A5A4670087D6F8 /* RTMConnectionTestCase.swift */,
12331236
D39724C524A852400099A518 /* IMClientTestCase.swift */,
@@ -1772,6 +1775,7 @@
17721775
buildActionMask = 2147483647;
17731776
files = (
17741777
D30B6B6224A0A933006ABE09 /* BaseTestCase.swift in Sources */,
1778+
D313718026BBDAC200123756 /* LCQueryTestCase.swift in Sources */,
17751779
D36A095A25BEA75000A4F312 /* IMMessageTestCase.swift in Sources */,
17761780
D3AD74AB24BC216200D1BBEE /* LCUserTestCase.swift in Sources */,
17771781
D3A397F124A5A4670087D6F8 /* RTMConnectionTestCase.swift in Sources */,
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
//
2+
// LCQueryTestCase.swift
3+
// LeanCloudObjcTests
4+
//
5+
// Created by pzheng on 2021/08/05.
6+
// Copyright © 2021 LeanCloud Inc. All rights reserved.
7+
//
8+
9+
import XCTest
10+
@testable import LeanCloudObjc
11+
12+
class LCQueryTestCase: BaseTestCase {
13+
14+
func testOrQuery() {
15+
let object1 = LCObject()
16+
let object2 = LCObject()
17+
18+
XCTAssertTrue(LCObject.saveAll([object1, object2]))
19+
20+
guard let object1id = object1.objectId,
21+
let object2id = object2.objectId else {
22+
return
23+
}
24+
25+
let query1 = LCQuery(className: object1.className)
26+
query1.whereKey("objectId", equalTo: object1id)
27+
let query2 = LCQuery(className: object2.className)
28+
query2.whereKey("objectId", equalTo: object2id)
29+
30+
XCTAssertEqual(LCQuery.orQuery(withSubqueries: [query1, query2])?.findObjects()?.count, 2)
31+
XCTAssertEqual(LCQuery.orQuery(withSubqueries: [query1])?.findObjects()?.count, 1)
32+
XCTAssertEqual(LCQuery.orQuery(withSubqueries: [])?.findObjects()?.count, nil)
33+
XCTAssertEqual(LCQuery.orQuery(withSubqueries: [LCQuery(className: object1.className)])?.findObjects()?.count, nil)
34+
}
35+
36+
func testAndQuery() {
37+
let andKeySame = "andKeySame"
38+
let andKeyDiff = "andKeyDiff"
39+
let sameValue = uuid
40+
let diffValue1 = uuid
41+
let diffValue2 = uuid
42+
let object1 = LCObject()
43+
object1[andKeySame] = sameValue
44+
object1[andKeyDiff] = diffValue1
45+
let object2 = LCObject()
46+
object2[andKeySame] = sameValue
47+
object2[andKeyDiff] = diffValue2
48+
49+
XCTAssertTrue(LCObject.saveAll([object1, object2]))
50+
51+
guard let _ = object1.objectId,
52+
let _ = object2.objectId else {
53+
return
54+
}
55+
56+
let query1 = LCQuery(className: object1.className)
57+
query1.whereKey(andKeySame, equalTo: sameValue)
58+
let query2 = LCQuery(className: object2.className)
59+
query2.whereKey(andKeyDiff, equalTo: diffValue2)
60+
61+
XCTAssertEqual(LCQuery.andQuery(withSubqueries: [query1, query2])?.findObjects()?.count, 1)
62+
XCTAssertEqual(LCQuery.andQuery(withSubqueries: [query1])?.findObjects()?.count, 2)
63+
XCTAssertEqual(LCQuery.andQuery(withSubqueries: [])?.findObjects()?.count, nil)
64+
XCTAssertEqual(LCQuery.andQuery(withSubqueries: [LCQuery(className: object1.className)])?.findObjects()?.count, nil)
65+
}
66+
}

AVOS/LeanCloudObjcTests/RTMConnectionTestCase.swift

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -297,13 +297,9 @@ class RTMConnectionTestCase: RTMBaseTestCase {
297297
}
298298

299299
func testGoaway() {
300-
var error: NSError?
301-
LCRouter.sharedInstance()
302-
.cleanCache(
303-
with: .default(),
304-
key: .RTM,
305-
error: &error)
306-
if let error = error {
300+
do {
301+
try LCRouter.sharedInstance().cleanCache(with: .default(), key: .RTM)
302+
} catch {
307303
XCTFail("\(error)")
308304
return
309305
}

AVOS/Sources/Foundation/File/LCFile.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -616,7 +616,7 @@ - (void)uploadWithOption:(LCFileUploadOption)uploadOption
616616

617617
__block BOOL isUploading = false;
618618
[self internalSyncLock:^{
619-
if (self->_uploadOption) {
619+
if (self->_uploadOption != nil) {
620620
isUploading = true;
621621
} else {
622622
self->_uploadOption = @(uploadOption);

AVOS/Sources/Foundation/Object/LCObject.m

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -627,15 +627,15 @@ -(BOOL)moveToEstimated:(NSString *)key
627627
localNumber = self._localData[key];
628628
}];
629629
NSNumber * estimatedNumber = [self._estimatedData valueForKey:key];
630-
if (localNumber)
630+
if (localNumber != nil)
631631
{
632632
[self._estimatedData setValue:localNumber forKey:key];
633633
[self internalSyncLock:^{
634634
[self._localData removeObjectForKey:key];
635635
}];
636636
return YES;
637637
}
638-
if (estimatedNumber)
638+
if (estimatedNumber != nil)
639639
{
640640
return YES;
641641
}
@@ -1490,18 +1490,19 @@ - (void)fetchInBackgroundWithKeys:(NSArray *)keys
14901490
}];
14911491
}
14921492

1493-
- (void)handleFetchResult:(id)object error:(NSError **)error{
1493+
- (BOOL)handleFetchResult:(id)object error:(NSError * __autoreleasing *)error {
14941494
if ([object allKeys].count <= 0) {
1495-
// 返回 {}
14961495
if (error != NULL) {
14971496
*error = LCError(kLCErrorObjectNotFound, @"not found the object to fetch", nil);
14981497
}
1498+
return false;
14991499
} else {
15001500
[self removeLocalData];
15011501
[LCObjectUtils copyDictionary:object toObject:self];
15021502
if (self == [LCUser currentUser]) {
15031503
[[self class] changeCurrentUser:(LCUser *)self save:YES];
15041504
}
1505+
return true;
15051506
}
15061507
}
15071508

AVOS/Sources/Foundation/Query/LCQuery.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -309,14 +309,14 @@ typedef NS_ENUM(NSInteger, LCQueryDistanceUnit) {
309309
@param queries The list of queries to or together.
310310
@return a LCQuery that is the or of the passed in LCQuerys.
311311
*/
312-
+ (LCQuery *)orQueryWithSubqueries:(NSArray *)queries;
312+
+ (nullable LCQuery *)orQueryWithSubqueries:(NSArray<LCQuery *> *)queries;
313313

314314
/*!
315315
Returns a LCQuery that is the AND of the passed in LCQuerys.
316316
@param queries The list of queries to AND together.
317317
@return a LCQuery that is the AND of the passed in LCQuerys.
318318
*/
319-
+ (LCQuery *)andQueryWithSubqueries:(NSArray *)queries;
319+
+ (nullable LCQuery *)andQueryWithSubqueries:(NSArray<LCQuery *> *)queries;
320320

321321
/*!
322322
Adds a constraint that requires that a key's value matches a value in another key

AVOS/Sources/Foundation/Query/LCQuery.m

Lines changed: 36 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -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"}}}'

AVOS/Sources/Foundation/Request/LCPaasClient.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@ - (void)performRequest:(NSURLRequest *)request
603603
// decoding 'code'
604604
NSNumber *code = [NSNumber _lc_decoding:userInfo key:kLC_code];
605605

606-
if (code) {
606+
if (code != nil) {
607607

608608
// decoding 'error'
609609
NSString *reason = [NSString _lc_decoding:userInfo key:kLC_error];

AVOS/Sources/Foundation/Router/LCRouter.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ FOUNDATION_EXPORT RouterCacheKey const RouterCacheKeyRTM;
2424
/// Clean disk cache.
2525
/// @param key See `RouterCacheKey`.
2626
/// @param error The pointer to `NSErrorPointer`.
27-
- (void)cleanCacheWithKey:(RouterCacheKey)key
28-
error:(NSError **)error;
27+
- (BOOL)cleanCacheWithKey:(RouterCacheKey)key
28+
error:(NSError * __autoreleasing *)error;
2929

3030
@end
3131

AVOS/Sources/Foundation/Router/LCRouter.m

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,16 +152,19 @@ static void cachingRouterData(NSDictionary *routerDataMap, RouterCacheKey key)
152152
[data writeToFile:filePath atomically:true];
153153
}
154154

155-
- (void)cleanCacheWithKey:(RouterCacheKey)key error:(NSError * __autoreleasing *)error
155+
- (BOOL)cleanCacheWithKey:(RouterCacheKey)key
156+
error:(NSError * __autoreleasing *)error
156157
{
157158
NSParameterAssert(key);
159+
BOOL result = false;
158160
NSString *filePath = [[LCRouter routerCacheDirectoryPath] stringByAppendingPathComponent:key];
159161
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
160-
[[NSFileManager defaultManager] removeItemAtPath:filePath error:error];
162+
result = [[NSFileManager defaultManager] removeItemAtPath:filePath error:error];
161163
}
164+
return result;
162165
}
163166

164-
- (void)cleanCacheWithApplication:(LCApplication *)application
167+
- (BOOL)cleanCacheWithApplication:(LCApplication *)application
165168
key:(RouterCacheKey)key
166169
error:(NSError * __autoreleasing *)error
167170
{
@@ -175,7 +178,7 @@ - (void)cleanCacheWithApplication:(LCApplication *)application
175178
[self->_RTMRouterMap removeObjectForKey:appID];
176179
[self->_lock unlock];
177180
}
178-
[self cleanCacheWithKey:key error:error];
181+
return [self cleanCacheWithKey:key error:error];
179182
}
180183

181184
// MARK: - App Router

0 commit comments

Comments
 (0)