FFDBTransaction.m 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. //
  2. // FFDBTransaction.m
  3. // FFDB
  4. //
  5. // Created by Fidetro on 2017/5/12.
  6. // Copyright © 2017年 Fidetro. All rights reserved.
  7. //
  8. // https://github.com/Fidetro/FFDB
  9. #import "FFDBTransaction.h"
  10. #import "FFDBLog.h"
  11. #import "FFDataBaseModel+Sqlite.h"
  12. #import "FFDataBaseModel+Custom.h"
  13. #import "NSObject+FIDProperty.h"
  14. #import "NSString+FFDBSQLStatement.h"
  15. @implementation FFDBTransaction
  16. + (NSArray <__kindof FFDataBaseModel *>*)selectObjectWithFFDBClass:(Class)dbClass
  17. {
  18. return [FFDBTransaction selectObjectWithFFDBClass:dbClass format:nil];
  19. }
  20. + (NSArray <__kindof FFDataBaseModel *>*)selectObjectWithFFDBClass:(Class)dbClass format:(NSString *)format
  21. {
  22. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  23. NSMutableArray *objectList = [NSMutableArray array];
  24. [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
  25. FMResultSet *resultSet;
  26. resultSet = [db executeQuery:[NSString stringWithSelectColumns:nil fromClasses:@[dbClass] SQLStatementWithFormat:format]];
  27. while ([resultSet next])
  28. {
  29. id object = [[dbClass alloc]init];
  30. for (NSString *propertyname in [dbClass columnsOfSelf])
  31. {
  32. NSString *result = [resultSet stringForColumn:propertyname];
  33. NSString *objStr = [result length] == 0 ? @"" :result;
  34. [object setPropertyWithName:propertyname object:objStr];
  35. }
  36. [object setPropertyWithName:@"primaryID" object:[resultSet stringForColumn:@"primaryID"]];
  37. [objectList addObject:object];
  38. }
  39. }];
  40. return [objectList copy];
  41. }
  42. + (void)insertObjectList:(NSArray <__kindof FFDataBaseModel *>*)objectList
  43. isRollBack:(BOOL)isRollBack
  44. {
  45. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  46. [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
  47. for (FFDataBaseModel *dbModel in objectList)
  48. {
  49. NSString *sql = [NSString stringWithInsertObject:dbModel columns:nil];
  50. BOOL result = [db executeUpdate:sql];
  51. if (result == NO)
  52. {
  53. *rollback = isRollBack;
  54. FFDBDLog(@"error rollback");
  55. }
  56. }
  57. }];
  58. }
  59. + (void)updateObjectList:(NSArray<__kindof FFDataBaseModel *> *)objectList
  60. isRollBack:(BOOL)isRollBack
  61. {
  62. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  63. [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
  64. for (FFDataBaseModel *dbModel in objectList)
  65. {
  66. NSString *sql = [NSString stringWithUpdateObject:dbModel columns:nil];
  67. BOOL result = [db executeUpdate:sql];
  68. if (result == NO)
  69. {
  70. *rollback = isRollBack;
  71. FFDBDLog(@"error rollback");
  72. }
  73. }
  74. }];
  75. }
  76. + (BOOL)updateObjectWithFFDBClass:(Class)dbClass
  77. format:(NSString *)format
  78. isRollBack:(BOOL)isRollBack
  79. {
  80. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  81. __block BOOL result = NO;
  82. [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
  83. result = [db executeUpdate:[NSString stringWithUpdateFromClass:dbClass SQLStatementWithFormat:format]];
  84. if (result == NO)
  85. {
  86. *rollback = isRollBack;
  87. FFDBDLog(@"error rollback");
  88. }
  89. }];
  90. return result;
  91. }
  92. + (void)deleteObjectList:(NSArray<__kindof FFDataBaseModel *> *)objectList
  93. isRollBack:(BOOL)isRollBack
  94. {
  95. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  96. [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
  97. for (FFDataBaseModel *dbModel in objectList)
  98. {
  99. NSString *sql = [NSString stringWithDeleteFromClass:[dbModel class] SQLStatementWithFormat:[dbModel deleteObjectSqlstatement]];
  100. BOOL result = [db executeUpdate:sql];
  101. if (result == NO)
  102. {
  103. *rollback = isRollBack;
  104. FFDBDLog(@"error rollback");
  105. }
  106. }
  107. }];
  108. }
  109. + (BOOL)deleteObjectWithFFDBClass:(Class)dbClass
  110. format:(NSString *)format
  111. isRollBack:(BOOL)isRollBack
  112. {
  113. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  114. __block BOOL result = NO;
  115. [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
  116. result = [db executeUpdate:[NSString stringWithDeleteFromClass:dbClass SQLStatementWithFormat:format]];
  117. if (result == NO)
  118. {
  119. *rollback = isRollBack;
  120. FFDBDLog(@"error rollback");
  121. }
  122. }];
  123. return result;
  124. }
  125. + (NSArray <__kindof FFDataBaseModel *>*)selectDBToClass:(Class)toClass
  126. SQLStatementWithFormat:(NSString *)format
  127. {
  128. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  129. NSMutableArray *objectList = [NSMutableArray array];
  130. NSArray *dataColumns = [toClass columnsOfSelf];
  131. [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
  132. FMResultSet *resultSet;
  133. resultSet = [db executeQuery:format];
  134. while ([resultSet next])
  135. {
  136. id object = [[toClass alloc]init];
  137. for (NSString *propertyname in dataColumns)
  138. {
  139. NSString *result = [resultSet stringForColumn:propertyname];
  140. NSString *objStr = [result length] == 0 ? @"" :result;
  141. [object setPropertyWithName:propertyname object:objStr];
  142. }
  143. [objectList addObject:object];
  144. }
  145. }];
  146. return [objectList copy];
  147. }
  148. + (BOOL)updateDBWithSQLStatementWithFormat:(NSString *)format
  149. isRollBack:(BOOL)isRollBack
  150. {
  151. FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[FFDBManager databasePath]];
  152. __block BOOL result = NO;
  153. [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
  154. result = [db executeUpdate:format];
  155. if (result == NO)
  156. {
  157. *rollback = isRollBack;
  158. FFDBDLog(@"error rollback");
  159. }
  160. }];
  161. return result;
  162. }
  163. @end