Latest0.1.5
Homepagehttps://github.com/Rannie/RHParrotData
LicenseMIT
Platformsios 6.0, requires ARC
FrameworksCoreData

Platform
Version

CoreData stack management and quick query language library.

Swift Version

Usage


Install

Use CocoaPods

touch a Podfile and add:

pod 'RHParrotData'

Or clone this repository

Drag "RHParrotData" folder into your project, and import "RHParrotData.h".

Setup Database

NSURL *momdURL = [[NSBundle mainBundle] URLForResource:$YOUR_MOMDFILENAME withExtension:@"momd"];
NSURL *appDocumentsDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
NSURL *storeURL = [appDocumentsDirectory URLByAppendingPathComponent:$YOUR_DBNAME];
[RHDataAgent setupAgentWithMomdFile:momdURL andStoreURL:storeURL];

Then u can retrieve the instance of RHDataAgent by class method ‘agent‘.

Query

Simple Operator Query:
RHQuery *query = [RHQuery queryWithEntity:@"Person"];
[query queryKey:@"name" op:RHEqual value:@"Kobe"];
id result = [query execute];

Result will be a name == "Kobe" person array.

Query and Sort:
RHQuery *sortQuery = [RHQuery queryWithEntity:@"Person"];
[sortQuery sort:@"age" ascending:NO];
id result = [sortQuery execute];

Age will sort descending.

Query with Function
RHQuery *queryAverageAge = [query same];
[queryAverageAge queryKey:@"age" function:RHAverage];
id result = [queryAverageAge execute];

same means query same entity.
Result will be the average number about age;

Compound Query

RHQuery also support compound query.

- (RHQuery *)OR:(RHQuery *)anoQuery;
- (RHQuery *)AND:(RHQuery *)anoQuery;
- (RHQuery *)NOT;

Sample:

RHQuery *orQuery = [queryStart OR:query];   //"name == Kobe" query above
id result = [orQuery execute];

Result will be a list contains "$QUERY_START_CONDITION" or "name == Kobe" objects.

Data Import

Need new a RHDataImportor instance, and use:

- (void)importEntity:(NSString *)entity
         primaryKey:(NSString *)primaryKey
               data:(NSArray *)data
      insertHandler:(RHObjectSerializeHandler)insertHandler
      updateHandler:(RHObjectSerializeHandler)updateHandler;

It will import data in a background managedObjectContext and merge changes to the main managedObjectContext.

NSFetchedResultController

The class ‘RHQueryResultController’ is a subclass of ‘NSFetchedResultController’.
Use it with RHQuery:

RHQuery *query = ...
RHQueryResultController *qrc = [RHQueryResultController queryResultControllerWithQuery:query];
[qrc performQuery];

Or use queryResultControllerWithQuery:sectionNameKeyPath:cacheName: method to support section or cache.

Data Agent

Agent is a singleton. It’s Features:

  • commit changes about managed objects
  • cache queries
  • undo management
  • memory management

Insert and update:

[[RHDataAgent agent] commit];

Delete object or objects:

[[RHDataAgent agent] deleteObject:objToDelete];
[[RHDataAgent agent] deleteObjects:(NSArray *)objsToDelete];

execute RHQuery:

[[RHDataAgent agent] executeQuery:query];

Undo management:

- (void)undo;
- (void)redo;
- (void)rollback;
- (void)reset;

Reduce memory:

- (void)reduceMemory;

Query Operators


Operator EnumComparisonExample
RHEqual=="name == Hanran"
RHGreaterThan>"age > 20"
RHLessThan<"age < 40"
RHGreaterOrEqual>="price >= 100"
RHLessOrEqual<="price <= 1000"
RHNot!="sex != female"
RHBetween< lhs <"price IN 100, 1000"
RHBeginsWithlhs start with rhs"Terry BEGINSWITH T"
RHEndsWithlhs end with rhs"Terry ENDSWITH y"
RHContainslhs contains rhs"Terry CONTAINS rr"
RHLikelhs like rhs"name LIKE next"
RHMatcheslhs matches rhs"name MATCHES ^A.+e$". Regular Expressions
RHInlhs in rhs"name IN Ben, Melissa, Nick"

Query Functions


Function EnumMeaning
RHMaxmax number of the column
RHMinmin number of the column
RHAverageaverage number
RHSumsum number
RHCountrow count

TODO


Podspec File
Document
NSFetchResultController
Log Util
Swift Version (CoreDataParrot)
Test
Complete Example
FMDB Version
Base ManagedObject (Serialization)

LICENSE


The MIT License (MIT)

Copyright (c) 2015 Hanran Liu

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Latest podspec

{
    "name": "RHParrotData",
    "version": "0.1.5",
    "summary": "CoreData stack management and quick query language library.",
    "homepage": "https://github.com/Rannie/RHParrotData",
    "license": "MIT",
    "authors": "Hanran Liu",
    "platforms": {
        "ios": "6.0"
    },
    "source": {
        "git": "https://github.com/Rannie/RHParrotData.git",
        "tag": "0.1.5"
    },
    "source_files": [
        "RHParrotData",
        "RHParrotData/*.{h,m}"
    ],
    "frameworks": "CoreData",
    "requires_arc": true
}

Pin It on Pinterest

Share This