From f10a51bff9fb617c100a34985ddaa6a62f96e9a9 Mon Sep 17 00:00:00 2001 From: Christopher Ney Date: Sun, 2 Nov 2014 14:24:47 +0100 Subject: [PATCH] Add example features, and block comments in library classes. --- Example/Example/Base.lproj/Main.storyboard | 3 + Example/Example/RootTableViewController.h | 8 +- Example/Example/RootTableViewController.m | 44 ++++++++- .../UserInterfaceState.xcuserstate | Bin 40918 -> 41883 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 86 +++++++++++++--- Sources/SQPDatabase.h | 35 +++++++ Sources/SQPObject.h | 92 ++++++++++++++++++ Sources/SQPObject.m | 23 ++++- 8 files changed, 273 insertions(+), 18 deletions(-) diff --git a/Example/Example/Base.lproj/Main.storyboard b/Example/Example/Base.lproj/Main.storyboard index e467ddf..e05daf6 100644 --- a/Example/Example/Base.lproj/Main.storyboard +++ b/Example/Example/Base.lproj/Main.storyboard @@ -22,6 +22,9 @@ Color Power + + + diff --git a/Example/Example/RootTableViewController.h b/Example/Example/RootTableViewController.h index 4c558ee..9bf9625 100644 --- a/Example/Example/RootTableViewController.h +++ b/Example/Example/RootTableViewController.h @@ -8,10 +8,16 @@ #import -@interface RootTableViewController : UITableViewController +@interface RootTableViewController : UITableViewController @property (nonatomic, strong) NSMutableArray *items; +@property (nonatomic) NSInteger orderLastIndex; +@property (nonatomic, strong) NSString *orderProperty; +@property (nonatomic) BOOL orderDirection; + +@property (nonatomic, strong) NSString *where; + #pragma mark - Actions - (IBAction)actionAddEntity:(id)sender; diff --git a/Example/Example/RootTableViewController.m b/Example/Example/RootTableViewController.m index ac862cc..223179f 100644 --- a/Example/Example/RootTableViewController.m +++ b/Example/Example/RootTableViewController.m @@ -28,7 +28,7 @@ - (void)viewDidLoad { NSLog(@"DB path: %@ ", [[SQPDatabase sharedInstance] getDdPath]); - self.items = [Car SQPFetchAllWhere:nil orderBy:nil]; + self.items = [Car SQPFetchAll]; /* // If database exists: @@ -146,6 +146,48 @@ - (IBAction)actionClearAll:(id)sender { [self.tableView reloadData]; } +#pragma mark - UISearchBar Delagete + +-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { + [searchBar resignFirstResponder]; +} + +-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { + + NSString *searchText = searchBar.text; + + self.where = [NSString stringWithFormat:@"name LIKE '%%%@%%'", searchText]; + + self.items = [Car SQPFetchAllWhere:self.where orderBy:self.orderProperty]; + + [self.tableView reloadData]; +} + +-(void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope { + + if (self.orderLastIndex == selectedScope) { + self.orderDirection = !self.orderDirection; + } + + if (selectedScope == 0) { + self.orderProperty = @"name"; + } else if (selectedScope == 1) { + self.orderProperty = @"color"; + } else { + self.orderProperty = @"power"; + } + + if (self.orderDirection == YES) { + self.orderProperty = [NSString stringWithFormat:@"%@ DESC", self.orderProperty]; + } + + self.orderLastIndex = selectedScope; + + self.items = [Car SQPFetchAllWhere:self.where orderBy:self.orderProperty]; + + [self.tableView reloadData]; +} + #pragma mark - UITableView Datasource -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { diff --git a/SQPersist.xcworkspace/xcuserdata/christopherney.xcuserdatad/UserInterfaceState.xcuserstate b/SQPersist.xcworkspace/xcuserdata/christopherney.xcuserdatad/UserInterfaceState.xcuserstate index 024c01f58f634008eb368eb079b8aba6dd8d039c..57f804666a91a58fa1946eb3c184fed73a7c8afc 100644 GIT binary patch literal 41883 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 diff --git a/SQPersist.xcworkspace/xcuserdata/christopherney.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/SQPersist.xcworkspace/xcuserdata/christopherney.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 55d0c42..301e737 100644 --- a/SQPersist.xcworkspace/xcuserdata/christopherney.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/SQPersist.xcworkspace/xcuserdata/christopherney.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -10,11 +10,11 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Sources/SQPObject.m" - timestampString = "436619842.411582" + timestampString = "436627409.361983" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "509" - endingLineNumber = "509" + startingLineNumber = "521" + endingLineNumber = "521" landmarkName = "+SQPObjectFromClassName:" landmarkType = "5"> @@ -186,12 +186,12 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Sources/SQPObject.m" - timestampString = "436619839.243175" + timestampString = "436626532.888654" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "337" - endingLineNumber = "337" - landmarkName = "+SQPFetchAllForTable:andClassName:Where:orderBy:" + startingLineNumber = "344" + endingLineNumber = "344" + landmarkName = "+SQPFetchAllForTable:andClassName:Where:orderBy:pageIndex:itemsPerPage:" landmarkType = "5"> @@ -202,12 +202,76 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Sources/SQPObject.m" - timestampString = "436619870.492438" + timestampString = "436626532.888654" + startingColumnNumber = "9223372036854775807" + endingColumnNumber = "9223372036854775807" + startingLineNumber = "345" + endingLineNumber = "345" + landmarkName = "+SQPFetchAllForTable:andClassName:Where:orderBy:pageIndex:itemsPerPage:" + landmarkType = "5"> + + + + + + + + + + + + + + + + diff --git a/Sources/SQPDatabase.h b/Sources/SQPDatabase.h index 0df249c..1de5ac4 100644 --- a/Sources/SQPDatabase.h +++ b/Sources/SQPDatabase.h @@ -18,18 +18,53 @@ NSString *_dbPath; } +/** + * Get the main instance of the database manager. + * + * @return Instance. + */ + (id)sharedInstance; +/** + * Setup the database. + * + * @param dbName Name of the database. + */ - (void)setupDatabaseWithName:(NSString*)dbName; +/** + * Return the name of the database. + * + * @return Database name. + */ - (NSString*)getDdName; +/** + * Return the path of the database. + * + * @return Path of the database. + */ - (NSString*)getDdPath; +/** + * Database connector. + * + * @return Database connector. + */ - (FMDatabase*)database; +/** + * Check if the database file exists. + * + * @return Return YES if the database exists. + */ - (BOOL)databaseExists; +/** + * Remove the database. + * + * @return Remove the database. + */ - (BOOL)removeDatabase; @end diff --git a/Sources/SQPObject.h b/Sources/SQPObject.h index f7099bf..fbe8449 100644 --- a/Sources/SQPObject.h +++ b/Sources/SQPObject.h @@ -18,31 +18,123 @@ @interface SQPObject : NSObject +/** + * The name of the entity class. + */ @property (nonatomic, strong) NSString *SQPClassName; + +/** + * The name of teh associed table of the entity. + */ @property (nonatomic, strong) NSString *SQPTableName; + +/** + * Array of class properties. + */ @property (nonatomic, strong) NSArray *SQPProperties; +/** + * Unique entity object identifier. + */ @property (nonatomic, strong) NSString *objectID; + +/** + * Set at YES, if you want remove the entity object. + * Need to call the SQPSaveEntity method to apply de DELETE SQL order. + */ @property (nonatomic) BOOL deleteObject; +/** + * Create an entity of your object. + * + * @return Entity object + */ + (id)SQPCreateEntity; +/** + * Save the modification of the entity object. + * + * @return Return YES if the changes apply with succes. + */ - (BOOL)SQPSaveEntity; +/** + * Return every entities save of table. + * + * @return Array of entities. + */ + (NSMutableArray*)SQPFetchAll; +/** + * Return every entities save of table, with filtering conditions. + * + * @param queryOptions Filtering conditions (clause SQL WHERE). + * + * @return Array of entities. + */ + (NSMutableArray*)SQPFetchAllWhere:(NSString*)queryOptions; +/** + * Return every entities save of table, with filtering conditions and order. + * + * @param queryOptions Filtering conditions (clause SQL WHERE). + * @param orderOptions Ordering conditions (clause SQL ORDER BY). + * + * @return Array of entities. + */ + (NSMutableArray*)SQPFetchAllWhere:(NSString*)queryOptions orderBy:(NSString*)orderOptions; +/** + * Return every entities save of table, with filtering conditions and order, and pagination system. + * + * @param queryOptions Filtering conditions (clause SQL WHERE). + * @param orderOptions Ordering conditions (clause SQL ORDER BY). + * @param pageIndex Page index (start at 0 value). + * @param itemsPerPage Number of items per page. + * + * @return Array of entities. + */ ++ (NSMutableArray*)SQPFetchAllWhere:(NSString*)queryOptions orderBy:(NSString*)orderOptions pageIndex:(NSInteger)pageIndex itemsPerPage:(NSInteger)itemsPerPage; + +/** + * Return one entity object by filtering conditions. + * + * @param queryOptions Filtering conditions (clause SQL WHERE). + * + * @return The resulting entity object. + */ + (id)SQPFetchOneWhere:(NSString*)queryOptions; +/** + * Return one entity object. + * + * @param objectID Unique entity object identifier. + * + * @return The resulting entity object. + */ + (id)SQPFetchOneByID:(NSString*)objectID; +/** + * Return the number of entities save into the associated table. + * + * @return Number of entities. + */ + (long long)SQPCountAll; +/** + * Return the number of entities save into the associated table, with filtering conditions. + * + * @param queryOptions Filtering conditions (clause SQL WHERE). + * + * @return Number of entities. + */ + (long long)SQPCountAllWhere:(NSString*)queryOptions; +/** + * Remove all entities of the table (TRUNCATE). + * + * @return Return YES when the table is truncate. + */ + (BOOL)SQPTruncateAll; @end diff --git a/Sources/SQPObject.m b/Sources/SQPObject.m index 1e4295b..744512a 100644 --- a/Sources/SQPObject.m +++ b/Sources/SQPObject.m @@ -26,7 +26,7 @@ - (BOOL)SQPInsertObject; - (BOOL)SQPUpdateObject; - (BOOL)SQPDeleteObject; - (void)SQPSaveChildren; -+ (NSMutableArray*)SQPFetchAllForTable:(NSString*)tableName andClassName:(NSString*)className Where:(NSString*)queryOptions orderBy:(NSString*)orderOptions; ++ (NSMutableArray*)SQPFetchAllForTable:(NSString*)tableName andClassName:(NSString*)className Where:(NSString*)queryOptions orderBy:(NSString*)orderOptions pageIndex:(NSInteger)pageIndex itemsPerPage:(NSInteger)itemsPerPage; @end @implementation SQPObject @@ -313,7 +313,7 @@ + (NSMutableArray*)SQPFetchAll { NSString *className = NSStringFromClass([self class]); NSString *tableName = [NSString stringWithFormat:@"%@%@", kSQPTablePrefix, className]; - return [SQPObject SQPFetchAllForTable:tableName andClassName:className Where:nil orderBy:nil]; + return [SQPObject SQPFetchAllForTable:tableName andClassName:className Where:nil orderBy:nil pageIndex:0 itemsPerPage:0]; } + (NSMutableArray*)SQPFetchAllWhere:(NSString*)queryOption { @@ -321,7 +321,7 @@ + (NSMutableArray*)SQPFetchAllWhere:(NSString*)queryOption { NSString *className = NSStringFromClass([self class]); NSString *tableName = [NSString stringWithFormat:@"%@%@", kSQPTablePrefix, className]; - return [SQPObject SQPFetchAllForTable:tableName andClassName:className Where:queryOption orderBy:nil]; + return [SQPObject SQPFetchAllForTable:tableName andClassName:className Where:queryOption orderBy:nil pageIndex:0 itemsPerPage:0]; } + (NSMutableArray*)SQPFetchAllWhere:(NSString*)queryOptions orderBy:(NSString*)orderOptions { @@ -329,10 +329,18 @@ + (NSMutableArray*)SQPFetchAllWhere:(NSString*)queryOptions orderBy:(NSString*)o NSString *className = NSStringFromClass([self class]); NSString *tableName = [NSString stringWithFormat:@"%@%@", kSQPTablePrefix, className]; - return [SQPObject SQPFetchAllForTable:tableName andClassName:className Where:queryOptions orderBy:orderOptions]; + return [SQPObject SQPFetchAllForTable:tableName andClassName:className Where:queryOptions orderBy:orderOptions pageIndex:0 itemsPerPage:0]; } -+ (NSMutableArray*)SQPFetchAllForTable:(NSString*)tableName andClassName:(NSString*)className Where:(NSString*)queryOptions orderBy:(NSString*)orderOptions { ++ (NSMutableArray*)SQPFetchAllWhere:(NSString*)queryOptions orderBy:(NSString*)orderOptions pageIndex:(NSInteger)pageIndex itemsPerPage:(NSInteger)itemsPerPage { + + NSString *className = NSStringFromClass([self class]); + NSString *tableName = [NSString stringWithFormat:@"%@%@", kSQPTablePrefix, className]; + + return [SQPObject SQPFetchAllForTable:tableName andClassName:className Where:queryOptions orderBy:orderOptions pageIndex:pageIndex itemsPerPage:itemsPerPage]; +} + ++ (NSMutableArray*)SQPFetchAllForTable:(NSString*)tableName andClassName:(NSString*)className Where:(NSString*)queryOptions orderBy:(NSString*)orderOptions pageIndex:(NSInteger)pageIndex itemsPerPage:(NSInteger)itemsPerPage { NSMutableArray *items = [[NSMutableArray alloc] init]; @@ -343,6 +351,11 @@ + (NSMutableArray*)SQPFetchAllForTable:(NSString*)tableName andClassName:(NSStri if (queryOptions != nil) [sql appendFormat:@" WHERE %@", queryOptions]; if (orderOptions != nil) [sql appendFormat:@" ORDER BY %@", orderOptions]; + + if (itemsPerPage > 0) { + NSInteger offset = (pageIndex) * itemsPerPage; + [sql appendFormat:@" LIMIT %d, %d", offset, itemsPerPage]; + } FMResultSet *s = [db executeQuery:sql];