123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- //
- // FIDDataBaseModel.m
- // FFDB
- //
- // Created by Fidetro on 2017/3/22.
- // Copyright © 2017年 Fidetro. All rights reserved.
- //
- // https://github.com/Fidetro/FFDB
- #import "FFDataBaseModel.h"
- #import "FFDataBaseModel+Sqlite.h"
- #import "FFDataBaseModel+Custom.h"
- #import "NSObject+FIDProperty.h"
- NSString const* kUpdateContext = @"kUpdateContext";
- @interface FFDataBaseModel ()
- @property(nonatomic,strong,readwrite) NSString *primaryID;
- @end
- @implementation FFDataBaseModel
- + (NSArray <__kindof FFDataBaseModel *>*)selectFromClassAllObject
- {
- return [[self class] selectFromClassPredicateWithFormat:nil];
- }
- + (NSArray <__kindof FFDataBaseModel *>*)selectFromClassPredicateWithFormat:(NSString *)format
- {
-
- return [FFDBManager selectColumns:nil fromClass:[self class] SQLStatementWithFormat:format];
-
- }
- + (BOOL)deleteFromClassAllObject
- {
- return [[self class]deleteFromClassPredicateWithFormat:nil];
- }
- - (BOOL)deleteObject
- {
- return [[self class]deleteFromClassPredicateWithFormat:[self deleteObjectSqlstatement]];
- }
- + (BOOL)deleteFromClassPredicateWithFormat:(NSString *)format
- {
- return [FFDBManager deleteFromClass:[self class] SQLStatementWithFormat:format];
- }
- - (BOOL)insertObject
- {
- NSArray *propertyNames = [[self class]columnsOfSelf];
- return [FFDBManager insertObject:self columns:propertyNames];
- }
- - (BOOL)insertObjectWithColumns:(NSArray *)columns
- {
- return [FFDBManager insertObject:self columns:columns];
- }
- + (BOOL)updateFromClassPredicateWithFormat:(NSString *)format
- {
-
- return [FFDBManager updateFromClass:[self class] SQLStatementWithFormat:format];
- }
- - (BOOL)updateObject
- {
- NSArray *propertyNames = [[self class]columnsOfSelf];
- return [FFDBManager updateObject:self columns:propertyNames];
- }
- - (BOOL)upsert
- {
- if ([self.primaryID length] == 0)
- {
- return [self insertObject];
- }
- else
- {
- return [self updateObject];
- }
- }
- - (BOOL)upsertWithColumns:(NSArray *)columns
- {
- if (columns.count == 0)
- {
- return [self upsert];
- }
- else
- {
- long long int totalCount = [FFDBManager selectCountfromClasses:@[[self class]] SQLStatementWithFormat:[NSString stringWithFormat:@" where %@",[self stringWithWhereValueOfColumns:columns]]];
- if (totalCount == 0)
- {
- [self insertObject];
- }
- else
- {
- [self updateObject];
- }
- return YES;
- }
-
- }
- - (BOOL)updateObjectSetColumns:(NSArray *)columns
- {
- return [FFDBManager updateObject:self columns:columns];
- }
- - (void)updateObjectWithBlock:(void(^)())update_block
- {
- NSArray *propertyNames = [[self class]columnsOfSelf];
- if (update_block)
- {
- for (NSString *propertyName in propertyNames)
- {
- [self addObserver:self forKeyPath:propertyName options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:&kUpdateContext];
- }
- update_block();
- for (NSString *propertyName in propertyNames)
- {
- [self removeObserver:self forKeyPath:propertyName];
- }
- }
- }
- - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
- {
- if (context == &kUpdateContext)
- {
- [self updateObjectSetColumns:@[keyPath]];
- }
- }
- #pragma mark - --------------------------base method--------------------------
- + (void)initialize
- {
- if ([NSStringFromClass([self class])isEqualToString:@"FFDataBaseModel"])
- {
- return;
- }
- else if ([NSStringFromClass([self class])rangeOfString:@"NSKVONotifying"].location != NSNotFound)
- {
- return;
- }
- else
- {
- [FFDBManager createTableFromClass:self];
- [FFDBManager alterFromClass:self columns:nil];
- }
- }
- @end
|