| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- //
- // NSObject+LKDBHelper.m
- // LKDBHelper
- //
- // Created by LJH on 13-6-8.
- // Copyright (c) 2013年 ljh. All rights reserved.
- //
- #import "NSObject+LKDBHelper.h"
- @implementation NSObject (LKDBHelper_Delegate)
- + (void)dbDidCreateTable:(LKDBHelper *)helper tableName:(NSString *)tableName {
- }
- + (void)dbDidAlterTable:(LKDBHelper *)helper tableName:(NSString *)tableName addColumns:(NSArray *)columns {
- }
- + (void)dbDidInserted:(NSObject *)entity result:(BOOL)result {
- }
- + (void)dbDidDeleted:(NSObject *)entity result:(BOOL)result {
- }
- + (void)dbDidUpdated:(NSObject *)entity result:(BOOL)result {
- }
- + (void)dbDidSeleted:(NSObject *)entity {
- }
- + (BOOL)dbWillDelete:(NSObject *)entity {
- return YES;
- }
- + (BOOL)dbWillInsert:(NSObject *)entity {
- return YES;
- }
- + (BOOL)dbWillUpdate:(NSObject *)entity {
- return YES;
- }
- @end
- @implementation NSObject (LKDBHelper)
- #pragma mark - simplify synchronous function
- + (BOOL)checkModelClass:(NSObject *)model {
- if ([model isMemberOfClass:self])
- return YES;
- MOLogV(@"%@ can not use %@", NSStringFromClass(self), NSStringFromClass(model.class));
- return NO;
- }
- + (NSInteger)rowCountWithWhereFormat:(id)where, ... {
- if ([where isKindOfClass:[NSString class]]) {
- va_list list;
- va_start(list, where);
- where = [[NSString alloc] initWithFormat:where arguments:list];
- va_end(list);
- }
- return [[self getUsingLKDBHelper] rowCount:self where:where];
- }
- + (NSInteger)rowCountWithWhere:(id)where, ... {
- if ([where isKindOfClass:[NSString class]]) {
- va_list list;
- va_start(list, where);
- where = [[NSString alloc] initWithFormat:where arguments:list];
- va_end(list);
- }
- return [[self getUsingLKDBHelper] rowCount:self where:where];
- }
- + (NSMutableArray *)searchColumn:(id)columns where:(id)where orderBy:(NSString *)orderBy offset:(NSInteger)offset count:(NSInteger)count {
- return [[self getUsingLKDBHelper] search:self column:columns where:where orderBy:orderBy offset:offset count:count];
- }
- + (NSMutableArray *)searchWithWhere:(id)where orderBy:(NSString *)orderBy offset:(NSInteger)offset count:(NSInteger)count {
- return [[self getUsingLKDBHelper] search:self where:where orderBy:orderBy offset:offset count:count];
- }
- + (NSMutableArray *)searchWithWhere:(id)where {
- return [[self getUsingLKDBHelper] search:self where:where orderBy:nil offset:0 count:0];
- }
- + (NSMutableArray *)searchWithSQL:(NSString *)sql {
- return [[self getUsingLKDBHelper] searchWithSQL:sql toClass:self];
- }
- + (id)searchSingleWithWhere:(id)where orderBy:(NSString *)orderBy {
- return [[self getUsingLKDBHelper] searchSingle:self where:where orderBy:orderBy];
- }
- + (BOOL)insertToDB:(NSObject *)model {
- if ([self checkModelClass:model]) {
- return [[self getUsingLKDBHelper] insertToDB:model];
- }
- return NO;
- }
- + (BOOL)insertWhenNotExists:(NSObject *)model {
- if ([self checkModelClass:model]) {
- return [[self getUsingLKDBHelper] insertWhenNotExists:model];
- }
- return NO;
- }
- + (BOOL)updateToDB:(NSObject *)model where:(id)where, ... {
- if ([self checkModelClass:model]) {
- if ([where isKindOfClass:[NSString class]]) {
- va_list list;
- va_start(list, where);
- where = [[NSString alloc] initWithFormat:where arguments:list];
- va_end(list);
- }
- return [[self getUsingLKDBHelper] updateToDB:model where:where];
- }
- return NO;
- }
- + (BOOL)updateToDBWithSet:(NSString *)sets where:(id)where, ... {
- if ([where isKindOfClass:[NSString class]]) {
- va_list list;
- va_start(list, where);
- where = [[NSString alloc] initWithFormat:where arguments:list];
- va_end(list);
- }
- return [[self getUsingLKDBHelper] updateToDB:self set:sets where:where];
- }
- + (BOOL)deleteToDB:(NSObject *)model {
- if ([self checkModelClass:model]) {
- return [[self getUsingLKDBHelper] deleteToDB:model];
- }
- return NO;
- }
- + (BOOL)deleteWithWhere:(id)where, ... {
- if ([where isKindOfClass:[NSString class]]) {
- va_list list;
- va_start(list, where);
- where = [[NSString alloc] initWithFormat:where arguments:list];
- va_end(list);
- }
- return [[self getUsingLKDBHelper] deleteWithClass:self where:where];
- }
- + (BOOL)isExistsWithModel:(NSObject *)model {
- if ([self checkModelClass:model]) {
- return [[self getUsingLKDBHelper] isExistsModel:model];
- }
- return NO;
- }
- - (BOOL)updateToDB {
- if (self.rowid > 0) {
- return [self.class updateToDB:self where:nil];
- } else {
- return [self saveToDB];
- }
- }
- - (BOOL)saveToDB {
- return [self.class insertToDB:self];
- }
- - (BOOL)deleteToDB {
- return [self.class deleteToDB:self];
- }
- - (BOOL)isExistsFromDB {
- return [self.class isExistsWithModel:self];
- }
- + (void)insertArrayByAsyncToDB:(NSArray *)models {
- [self insertArrayByAsyncToDB:models completed:nil];
- }
- + (void)insertArrayByAsyncToDB:(NSArray *)models completed:(void (^_Nullable)(BOOL))completedBlock {
- if (models.count > 0) {
- dispatch_async(dispatch_get_global_queue(0, 0), ^{
- [self insertToDBWithArray:models filter:nil completed:completedBlock];
- });
- }
- }
- + (void)insertToDBWithArray:(NSArray *)models filter:(void (^)(id model, BOOL inserted, BOOL *rollback))filter {
- [self insertToDBWithArray:models filter:filter completed:nil];
- }
- + (void)insertToDBWithArray:(NSArray *)models filter:(void (^)(id model, BOOL inserted, BOOL *rollback))filter completed:(void (^)(BOOL))completedBlock {
- __block BOOL allInserted = YES;
- [[self getUsingLKDBHelper] executeForTransaction:^BOOL(LKDBHelper *helper) {
- BOOL isRollback = NO;
- for (int i = 0; i < models.count; i++) {
- id obj = [models objectAtIndex:i];
- BOOL inserted = [helper insertToDB:obj];
- allInserted &= inserted;
- if (filter) {
- filter(obj, inserted, &isRollback);
- }
- if (isRollback) {
- allInserted = NO;
- break;
- }
- }
- return (isRollback == NO);
- }];
- if (completedBlock) {
- completedBlock(allInserted);
- }
- }
- @end
|