Skip to content

Commit bb46885

Browse files
committed
Add query method
1 parent 19c1851 commit bb46885

File tree

8 files changed

+73
-6
lines changed

8 files changed

+73
-6
lines changed

.DS_Store

0 Bytes
Binary file not shown.

SJDBMap.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Pod::Spec.new do |s|
33
s.name = "SJDBMap"
4-
s.version = "1.2.0.3"
4+
s.version = "1.2.0.4"
55
s.summary = "Automatically create tables based on the model."
66
s.description = "https://github.com/changsanjiang/SJDBMap/blob/master/README.md"
77
s.homepage = "https://github.com/changsanjiang/SJDBMap"

SJDBMap/DatabaseMapping/SJDatabaseFunctions.m

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#import "SJDatabaseFunctions.h"
1010
#import <objc/message.h>
1111

12-
#define DEBUG_CONDITION (1)
12+
#define DEBUG_CONDITION (0)
1313

1414
NS_ASSUME_NONNULL_BEGIN
1515

@@ -362,9 +362,11 @@ bool sj_value_insert_or_update(sqlite3 *database, id<SJDBMapUseProtocol> model,
362362
_primaryKeyAdded = YES;
363363
}
364364
else { // 处理 普通键
365-
value = sj_value_filter(value); // 过滤一下
366-
[sql_strM appendFormat:@"'%@',", field];
367-
[sql_valuesM appendFormat:@"'%@',", value]; // 'value'
365+
if ( value != nil ) {
366+
value = sj_value_filter(value); // 过滤一下
367+
[sql_strM appendFormat:@"'%@',", field];
368+
[sql_valuesM appendFormat:@"'%@',", value]; // 'value'
369+
}
368370
}
369371
}];
370372

SJDBMap/DatabaseMapping/SJDatabaseMap+RealTime.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ NS_ASSUME_NONNULL_BEGIN
4343
- (NSArray<id<SJDBMapUseProtocol>> * __nullable)queryDataWithClass:(Class)cls queryDict:(NSDictionary *)dict;
4444
- (NSArray<id<SJDBMapUseProtocol>> * __nullable)queryDataWithClass:(Class)cls range:(NSRange)range;
4545
- (NSInteger)queryQuantityWithClass:(Class)cls;
46+
- (NSInteger)queryQuantityWithClass:(Class)cls quertyDict:(NSDictionary *)dict;
4647

4748
- (NSArray<id<SJDBMapUseProtocol>> * _Nullable)fuzzyQueryDataWithClass:(Class)cls queryDict:(NSDictionary *)dict match:(SJDatabaseMapFuzzyMatch)match;
4849
- (NSArray<id<SJDBMapUseProtocol>> * _Nullable)fuzzyQueryDataWithClass:(Class)cls property:(NSString *)fields part1:(NSString *)part1 part2:(NSString *)part2;

SJDBMap/DatabaseMapping/SJDatabaseMap+RealTime.m

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,48 @@ - (NSInteger)queryQuantityWithClass:(Class)cls {
199199
NSString *sql_str = [NSString stringWithFormat:@"SELECT count(*) FROM %s;", sj_table_name(cls)];
200200
return [sj_sql_query(self.database, sql_str.UTF8String, nil).firstObject[@"count(*)"] integerValue];
201201
}
202+
/*!
203+
* 查询
204+
*
205+
* dict:
206+
* @{
207+
* @"name": @"A",
208+
* @"tag": @"B"
209+
* }
210+
* or
211+
* @{
212+
* @"id" : @[@(0), @(2), @(3)],
213+
* @"name":@[@"A", @"B", @"C"]
214+
* } ==>>>> ... id in (0, 2, 3) and name in ('A', 'B', 'C')
215+
*/
216+
- (NSInteger)queryQuantityWithClass:(Class)cls quertyDict:(NSDictionary *)dict {
217+
if ( dict.allKeys.count == 0 ) {
218+
return [self queryQuantityWithClass:cls];
219+
}
220+
if ( !cls ) return 0;
221+
NSMutableString *sql_str = [NSMutableString stringWithFormat:@"SELECT count(*) FROM %s WHERE ", sj_table_name(cls)];
222+
if ( ![dict.allValues.firstObject isKindOfClass:[NSArray class]] ) {
223+
[dict enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
224+
[sql_str appendFormat:@"\"%@\" = '%@' AND ", key, sj_value_filter(obj)];
225+
}];
226+
[sql_str deleteCharactersInRange:NSMakeRange(sql_str.length - 5, 5)];
227+
[sql_str appendString:@";"];
228+
}
229+
else {
230+
[dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSArray *values, BOOL * _Nonnull stop) {
231+
[sql_str appendFormat:@"%@ IN (", key];
232+
[values enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
233+
obj = sj_value_filter(obj);
234+
[sql_str appendFormat:@"'%@',", obj];
235+
}];
236+
[sql_str deleteCharactersInRange:NSMakeRange(sql_str.length - 1, 1)];
237+
[sql_str appendFormat:@") AND "];
238+
}];
239+
[sql_str deleteCharactersInRange:NSMakeRange(sql_str.length - 5, 5)];
240+
[sql_str appendString:@";"];
241+
}
242+
return [sj_sql_query(self.database, sql_str.UTF8String, nil).firstObject[@"count(*)"] integerValue];
243+
}
202244

203245
- (NSArray<id<SJDBMapUseProtocol>> * _Nullable)fuzzyQueryDataWithClass:(Class)cls queryDict:(NSDictionary *)dict match:(SJDatabaseMapFuzzyMatch)match {
204246
if ( !cls ) return nil;

SJDBMap/DatabaseMapping/SJDatabaseMap.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,21 @@ NS_ASSUME_NONNULL_BEGIN
159159
*/
160160
- (void)queryQuantityWithClass:(Class)cls completeCallBlock:(void (^ __nullable)(NSInteger quantity))block;
161161

162+
/*!
163+
* 查记录的数量
164+
*
165+
* dict:
166+
* @{
167+
* @"name": @"A",
168+
* @"tag": @"B"
169+
* }
170+
* or
171+
* @{
172+
* @"id" : @[@(0), @(2), @(3)],
173+
* @"name":@[@"A", @"B", @"C"]
174+
* } ==>>>> ... id in (0, 2, 3) and name in ('A', 'B', 'C')
175+
*/
176+
- (void)queryQuantityWithClass:(Class)cls queryDict:(NSDictionary *)dict completeCallBlock:(void (^ __nullable)(NSInteger quantity))block;
162177

163178
/*!
164179
* 模糊查询

SJDBMap/DatabaseMapping/SJDatabaseMap.m

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,14 @@ - (void)queryQuantityWithClass:(Class)cls completeCallBlock:(void (^ __nullable)
228228
if ( block ) block(quantity);
229229
}];
230230
}
231-
231+
- (void)queryQuantityWithClass:(Class)cls queryDict:(NSDictionary *)dict completeCallBlock:(void (^ __nullable)(NSInteger quantity))block {
232+
__block NSInteger quantity = 0;
233+
[self performTasksWithSubThreadTask:^(SJDatabaseMap * _Nonnull mapper) {
234+
quantity = [mapper queryQuantityWithClass:cls quertyDict:dict];
235+
} mainTreadTask:^(SJDatabaseMap * _Nonnull mapper) {
236+
if ( block ) block(quantity);
237+
}];
238+
}
232239
- (void)fuzzyQueryDataWithClass:(Class)cls queryDict:(NSDictionary *)dict completeCallBlock:(void (^ __nullable)(NSArray<id<SJDBMapUseProtocol>> * _Nullable data))block {
233240
[self fuzzyQueryDataWithClass:cls queryDict:dict match:SJDatabaseMapFuzzyMatchBilateral completeCallBlock:block];
234241
}

0 commit comments

Comments
 (0)