@@ -183,15 +183,8 @@ bool sj_table_update(sqlite3 *database, SJDatabaseMapTableCarrier * carrier) {
183
183
return result;
184
184
}
185
185
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 ];
195
188
return result;
196
189
}
197
190
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,
264
257
#endif
265
258
return false ;
266
259
}
267
-
268
- __block bool result = false ;
269
260
270
261
NSMutableString *sql_strM = [NSMutableString string ];
271
262
[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,
277
268
__block BOOL _primaryKeyAdded = NO ; // 主键是否已添加到 sql_values 中
278
269
__block const char *_ivar = NULL ; // corresponding 对应的 ivar
279
270
271
+
272
+ __block bool result = true ;
280
273
[table_fields_list enumerateObjectsUsingBlock: ^(NSString * _Nonnull field, NSUInteger idx, BOOL * _Nonnull stop) {
281
274
id value = nil ;
282
275
276
+ BOOL r = NO ;
283
277
if ( (_ivar = [carrier isCorrespondingKeyWithCorresponding: field.UTF8String]) != NULL ) { // 处理 相应键
284
278
value = [(id )model valueForKey: [NSString stringWithUTF8String: _ivar]];
285
279
__block SJDatabaseMapTableCarrier *carrier_cor = nil ;
@@ -290,9 +284,10 @@ bool sj_value_insert_or_update(sqlite3 *database, id<SJDBMapUseProtocol> model,
290
284
}];
291
285
if ( !carrier_cor ) return ;
292
286
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 ) {
295
289
*stop = YES ;
290
+ result = r;
296
291
return ;
297
292
}
298
293
@@ -312,7 +307,6 @@ bool sj_value_insert_or_update(sqlite3 *database, id<SJDBMapUseProtocol> model,
312
307
313
308
if ( ![model respondsToSelector: NSSelectorFromString (field)] ) { return ;} // 过滤无法响应的字段
314
309
315
- result = false ;
316
310
value = [(id )model valueForKey: field];
317
311
// 处理 数组相应键
318
312
if ( [value isKindOfClass: [NSArray class ]] ) {
@@ -329,10 +323,12 @@ bool sj_value_insert_or_update(sqlite3 *database, id<SJDBMapUseProtocol> model,
329
323
if ( !carrier_arr ) return ;
330
324
NSMutableArray <NSNumber *> *corkey_primary_key_idsM = [NSMutableArray new ]; // 数组内元素的id
331
325
[(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 ) {
335
329
*stop = YES ;
330
+ result = r;
331
+ return ;
336
332
}
337
333
338
334
if ( !carrier_arr.isUsingPrimaryKey ) {
@@ -368,8 +364,6 @@ bool sj_value_insert_or_update(sqlite3 *database, id<SJDBMapUseProtocol> model,
368
364
[sql_strM appendFormat: @" '%@ '," , field];
369
365
[sql_valuesM appendFormat: @" '%@ '," , value]; // 'value'
370
366
}
371
-
372
- result = YES ;
373
367
}];
374
368
375
369
if ( !result ) {
0 commit comments