// // LHModelStateMent.m // LHDBDemo // // Created by 3wchina01 on 16/1/25. // Copyright © 2016年 李浩. All rights reserved. // #import "LHModelStateMent.h" #import "LHPredicate.h" #import "NSObject+LHModel.h" #import #define CREATE_TABLENAME_HEADER @"CREATE TABLE IF NOT EXISTS " #define INSERT_HEADER @"INSERT INTO " #define UPDATE_HEADER @"UPDATE " #define DELETE_HEADER @"DELETE FROM " #define SELECT_HEADER @"SELECT * FROM " @implementation LHModelStateMent static NSString* tableNameValueString(NSString* type,NSString* name) { NSString* finalStr = @","; NSString* typeStr = (NSString*)type; if ([typeStr isEqualToString:@"i"]) { return [NSString stringWithFormat:@"%@ %@%@",name,@"INT",finalStr]; }else if ([typeStr isEqualToString:@"f"]) { return [NSString stringWithFormat:@"%@ %@%@",name,@"FLOAT",finalStr]; }else if ([typeStr isEqualToString:@"B"]) { return [NSString stringWithFormat:@"%@ %@%@",name,@"BOOL",finalStr]; }else if ([typeStr isEqualToString:@"d"]) { return [NSString stringWithFormat:@"%@ %@%@",name,@"DOUBLE",finalStr]; }else if ([typeStr isEqualToString:@"q"]) { return [NSString stringWithFormat:@"%@ %@%@",name,@"LONG",finalStr]; }else if ([typeStr isEqualToString:@"NSData"]||[typeStr isEqualToString:@"UIImage"]) { return [NSString stringWithFormat:@"%@ %@%@",name,@"BLOB",finalStr]; }else if ([typeStr isEqualToString:@"NSNumber"]){ return [NSString stringWithFormat:@"%@ %@%@",name,@"INT",finalStr]; } else return [NSString stringWithFormat:@"%@ %@%@",name,@"TEXT",finalStr]; } static NSDictionary* insertValueString(id value,NSString* name,NSString* type) { if ([value isKindOfClass:[NSNumber class]]) { return @{name:@"?"}; }else if ([type isEqualToString:@"UIImage"]) { return @{name:@"?"}; }else return @{name:@"?"}; } static NSString* updateSQL(NSArray* value) { NSMutableString* string = [NSMutableString string]; for (NSString* propertyName in value) { [string appendFormat:@" %@ = ?,",propertyName]; } if (string.length>0) { [string deleteCharactersInRange:NSMakeRange(string.length-1, 1)]; } return string; } NSString* createTableString(Class modelClass) { NSMutableString* sqlString = [NSMutableString stringWithString:CREATE_TABLENAME_HEADER]; NSDictionary* stateMentDic = [modelClass getAllPropertyNameAndType]; [sqlString appendString:NSStringFromClass(modelClass)]; NSMutableString* valueStr = [NSMutableString string]; [stateMentDic enumerateKeysAndObjectsUsingBlock:^(NSString* key, NSString* obj, BOOL* stop) { [valueStr appendString:tableNameValueString(obj, key)]; }]; if (valueStr.length>0) { [valueStr deleteCharactersInRange:NSMakeRange(valueStr.length-1, 1)]; } [sqlString appendFormat:@"(%@)",valueStr]; return sqlString; } NSString* addColum(Class modelClass,NSString* propertyName) { NSString* sqlString = [NSString stringWithFormat:@"alter table %@ add %@ %@",NSStringFromClass(modelClass),propertyName,[modelClass getTypeNameWith:propertyName]]; return sqlString; } NSString* insertString(id model) { NSMutableString* sqlString = [NSMutableString stringWithString:INSERT_HEADER]; [sqlString appendString:NSStringFromClass([model class])]; NSDictionary* valueDic = [model lh_ModelToDictionary]; NSDictionary* typeDic = [object_getClass(model) getAllPropertyNameAndType]; NSMutableString* keyStr = [NSMutableString string]; NSMutableString* valueStr = [NSMutableString string]; for (int i=0; i