Skip to content

Commit 3b09050

Browse files
committed
Fix v1.2.0 insertOrUpdate problem
1 parent 1ecda8e commit 3b09050

File tree

5 files changed

+18
-24
lines changed

5 files changed

+18
-24
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"
4+
s.version = "1.2.0.1"
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: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -183,15 +183,8 @@ bool sj_table_update(sqlite3 *database, SJDatabaseMapTableCarrier * carrier) {
183183
return result;
184184
}
185185
bool sj_table_exists(sqlite3 *database, const char *table_name) {
186-
char *prefix = "SELECT count(*) FROM sqlite_master WHERE type='table' and name=";
187-
char *sql = malloc(1 + strlen(prefix) + strlen(table_name) + 3); // [1 -> \0] [3 -> NULL;]
188-
if ( !sql ) return false;
189-
strcat(sql, prefix);
190-
strcat(sql, "'");
191-
strcat(sql, table_name);
192-
strcat(sql, "';");
193-
bool result = [[sj_sql_query(database, sql, nil) firstObject][@"count(*)"] boolValue];
194-
free(sql);
186+
NSString *sql_str = [NSString stringWithFormat:@"SELECT count(*) FROM sqlite_master WHERE type='table' and name='%s';", table_name];
187+
bool result = [[sj_sql_query(database, sql_str.UTF8String, nil) firstObject][@"count(*)"] boolValue];
195188
return result;
196189
}
197190
NSArray<NSString *> *__nullable sj_table_fields(sqlite3 *database, const char *table_name) {
@@ -264,8 +257,6 @@ bool sj_value_insert_or_update(sqlite3 *database, id<SJDBMapUseProtocol> model,
264257
#endif
265258
return false;
266259
}
267-
268-
__block bool result = false;
269260

270261
NSMutableString *sql_strM = [NSMutableString string];
271262
[sql_strM appendFormat:@"INSERT OR REPLACE INTO '%s' (", table_name];
@@ -277,9 +268,12 @@ bool sj_value_insert_or_update(sqlite3 *database, id<SJDBMapUseProtocol> model,
277268
__block BOOL _primaryKeyAdded = NO; // 主键是否已添加到 sql_values 中
278269
__block const char *_ivar = NULL; // corresponding 对应的 ivar
279270

271+
272+
__block bool result = true;
280273
[table_fields_list enumerateObjectsUsingBlock:^(NSString * _Nonnull field, NSUInteger idx, BOOL * _Nonnull stop) {
281274
id value = nil;
282275

276+
BOOL r = NO;
283277
if ( (_ivar = [carrier isCorrespondingKeyWithCorresponding:field.UTF8String]) != NULL ) { // 处理 相应键
284278
value = [(id)model valueForKey:[NSString stringWithUTF8String:_ivar]];
285279
__block SJDatabaseMapTableCarrier *carrier_cor = nil;
@@ -290,9 +284,10 @@ bool sj_value_insert_or_update(sqlite3 *database, id<SJDBMapUseProtocol> model,
290284
}];
291285
if ( !carrier_cor ) return;
292286

293-
result = sj_value_insert_or_update(database, value, container, cache); // 插入或更新
294-
if ( !result ) {
287+
r = sj_value_insert_or_update(database, value, container, cache); // 插入或更新
288+
if ( !r ) {
295289
*stop = YES;
290+
result = r;
296291
return;
297292
}
298293

@@ -312,7 +307,6 @@ bool sj_value_insert_or_update(sqlite3 *database, id<SJDBMapUseProtocol> model,
312307

313308
if ( ![model respondsToSelector:NSSelectorFromString(field)] ) { return;} // 过滤无法响应的字段
314309

315-
result = false;
316310
value = [(id)model valueForKey:field];
317311
// 处理 数组相应键
318312
if ( [value isKindOfClass:[NSArray class]] ) {
@@ -329,10 +323,12 @@ bool sj_value_insert_or_update(sqlite3 *database, id<SJDBMapUseProtocol> model,
329323
if ( !carrier_arr ) return;
330324
NSMutableArray<NSNumber *> *corkey_primary_key_idsM = [NSMutableArray new]; // 数组内元素的id
331325
[(NSArray *)value enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
332-
result = sj_value_insert_or_update(database, obj, container, cache); // 插入或更新数据库
333-
if ( !result ) {
334-
return;
326+
BOOL r = NO;
327+
r = sj_value_insert_or_update(database, obj, container, cache); // 插入或更新数据库
328+
if ( !r ) {
335329
*stop = YES;
330+
result = r;
331+
return;
336332
}
337333

338334
if ( !carrier_arr.isUsingPrimaryKey ) {
@@ -368,8 +364,6 @@ bool sj_value_insert_or_update(sqlite3 *database, id<SJDBMapUseProtocol> model,
368364
[sql_strM appendFormat:@"'%@',", field];
369365
[sql_valuesM appendFormat:@"'%@',", value]; // 'value'
370366
}
371-
372-
result = YES;
373367
}];
374368

375369
if ( !result ) {

SJDBMap/DatabaseMapping/SJDatabaseMap+RealTime.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,19 +59,19 @@ - (BOOL)insertOrUpdateDataWithModels:(NSArray<id<SJDBMapUseProtocol>> *)models {
5959
__block BOOL result = [self _autoCreateOrUpdateClassesWithModels:models];
6060
if ( !result ) return NO;
6161

62-
NSMutableDictionary<Class, NSArray<SJDatabaseMapTableCarrier *> *> *classes = nil;
62+
NSMutableDictionary<NSString *, NSArray<SJDatabaseMapTableCarrier *> *> *classes = [NSMutableDictionary new];
6363
[models enumerateObjectsUsingBlock:^(id<SJDBMapUseProtocol> _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
64-
NSArray<SJDatabaseMapTableCarrier *> *contaienr = classes[[obj class]];
64+
NSArray<SJDatabaseMapTableCarrier *> *contaienr = classes[NSStringFromClass([obj class])];
6565
if ( !contaienr ) {
66-
contaienr = [NSMutableArray array];
66+
classes[NSStringFromClass([obj class])] = contaienr = [NSMutableArray array];
6767
[[[SJDatabaseMapTableCarrier alloc] initWithClass:[obj class]] parseCorrespondingKeysAddToContainer:(NSMutableArray *)contaienr];
6868
}
6969
}];
7070

7171
sj_transaction(self.database, ^{
7272
SJDatabaseMapCache *cache = [SJDatabaseMapCache new];
7373
[models enumerateObjectsUsingBlock:^(id<SJDBMapUseProtocol> _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
74-
result = sj_value_insert_or_update(self.database, obj, classes[[obj class]], cache);
74+
result = sj_value_insert_or_update(self.database, obj, classes[NSStringFromClass([obj class])], cache);
7575
if ( !result ) {
7676
*stop = YES;
7777
}

0 commit comments

Comments
 (0)