objective-c-sql-query-builder
|
00001 /* 00002 * Copyright 2011-2015 Ziminji 00003 * 00004 * Licensed under the Apache License, Version 2.0 (the "License"); 00005 * you may not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at: 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an "AS IS" BASIS, 00012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 00017 #import <Foundation/Foundation.h> 00018 00019 // Block Statement Tokens 00020 #define ZIMSqlEnclosureOpeningBrace @"(" 00021 #define ZIMSqlEnclosureClosingBrace @")" 00022 00023 // Connectors 00024 #define ZIMSqlConnectorAnd @"AND" 00025 #define ZIMSqlConnectorOr @"OR" 00026 00027 // Join Types -- http://sqlite.org/syntaxdiagrams.html#join-op 00028 #define ZIMSqlJoinTypeCross @"CROSS" 00029 #define ZIMSqlJoinTypeInner @"INNER" 00030 #define ZIMSqlJoinTypeLeft @"LEFT" 00031 #define ZIMSqlJoinTypeLeftOuter @"LEFT OUTER" 00032 #define ZIMSqlJoinTypeNatural @"NATURAL" 00033 #define ZIMSqlJoinTypeNaturalCross @"NATURAL CROSS" 00034 #define ZIMSqlJoinTypeNaturalInner @"NATURAL INNER" 00035 #define ZIMSqlJoinTypeNaturalLeft @"NATURAL LEFT" 00036 #define ZIMSqlJoinTypeNaturalLeftOuter @"NATURAL LEFT OUTER" 00037 #define ZIMSqlJoinTypeNone @"" 00038 00039 // Expressions -- http://zetcode.com/databases/sqlitetutorial/expressions/ 00040 // Arithmetic Operators 00041 #define ZIMSqlOperatorAdd @"+" 00042 #define ZIMSqlOperatorSubtract @"-" 00043 #define ZIMSqlOperatorMultiply @"*" 00044 #define ZIMSqlOperatorDivide @"/" 00045 #define ZIMSqlOperatorMod @"%" 00046 00047 // Boolean Operators 00048 #define ZIMSqlOperatorAnd @"AND" 00049 #define ZIMSqlOperatorOr @"OR" 00050 #define ZIMSqlOperatorNot @"NOT" 00051 00052 // Relational Operators 00053 #define ZIMSqlOperatorLessThan @"<" 00054 #define ZIMSqlOperatorLessThanOrEqualTo @"<=" 00055 #define ZIMSqlOperatorGreaterThan @">" 00056 #define ZIMSqlOperatorGreaterThanOrEqualTo @">=" 00057 #define ZIMSqlOperatorEqualTo @"=" 00058 #define ZIMSqlOperatorNotEqualTo @"<>" 00059 00060 // Bitwise Operators 00061 #define ZIMSqlOperatorBitwiseAnd @"&" 00062 #define ZIMSqlOperatorBitwiseOr @"|" 00063 #define ZIMSqlOperatorBitwiseShiftLeft @"<<" 00064 #define ZIMSqlOperatorBitwiseShiftRight @">>" 00065 #define ZIMSqlOperatorBitwiseNegation @"~" 00066 00067 // Additional Operators 00068 #define ZIMSqlOperatorConcatenate @"||" 00069 #define ZIMSqlOperatorIn @"IN" 00070 #define ZIMSqlOperatorNotIn @"NOT IN" 00071 #define ZIMSqlOperatorIs @"IS" 00072 #define ZIMSqlOperatorIsNot @"IS NOT" 00073 #define ZIMSqlOperatorLike @"LIKE" 00074 #define ZIMSqlOperatorNotLike @"NOT LIKE" 00075 #define ZIMSqlOperatorGlob @"GLOB" 00076 #define ZIMSqlOperatorNotGlob @"NOT GLOB" 00077 #define ZIMSqlOperatorBetween @"BETWEEN" 00078 #define ZIMSqlOperatorNotBetween @"NOT BETWEEN" 00079 00080 // Set Operators 00081 #define ZIMSqlOperatorExcept @"EXCEPT" 00082 #define ZIMSqlOperatorIntersect @"INTERSECT" 00083 #define ZIMSqlOperatorUnion @"UNION" 00084 #define ZIMSqlOperatorUnionAll @"UNION ALL" 00085 00086 // Show Types 00087 #define ZIMSqlShowTypeAll @"ALL" 00088 #define ZIMSqlShowTypePermanent @"PERMANENT" 00089 #define ZIMSqlShowTypeTemporary @"TEMPORARY" 00090 00091 // Order Operators (for Nulls) 00092 #define ZIMSqlNullsFirst @"FIRST" 00093 #define ZIMSqlNullsLast @"LAST" 00094 00095 // Default Values -- http://forums.realsoftware.com/viewtopic.php?f=3&t=35179 00096 #define ZIMSqlDefaultValueIsAutoIncremented @"PRIMARY KEY AUTOINCREMENT NOT NULL" 00097 #define ZIMSqlDefaultValueIsNull @"DEFAULT NULL" 00098 #define ZIMSqlDefaultValueIsNotNull @"NOT NULL" 00099 #define ZIMSqlDefaultValueIsCurrentDate @"DEFAULT CURRENT_DATE" 00100 #define ZIMSqlDefaultValueIsCurrentDateTime @"DEFAULT (datetime('now','localtime'))" 00101 #define ZIMSqlDefaultValueIsCurrentTime @"DEFAULT CURRENT_TIME" 00102 #define ZIMSqlDefaultValueIsCurrentTimestamp @"DEFAULT CURRENT_TIMESTAMP" 00103 NSString *ZIMSqlDefaultValue(id value); 00104 00105 // Declared Datetype -- http://www.sqlite.org/datatype3.html 00106 #define ZIMSqlDataTypeBigInt @"BIGINT" 00107 #define ZIMSqlDataTypeBlob @"BLOB" 00108 #define ZIMSqlDataTypeBoolean @"BOOLEAN" 00109 #define ZIMSqlDataTypeClob @"CLOB" 00110 #define ZIMSqlDataTypeDate @"DATE" 00111 #define ZIMSqlDataTypeDateTime @"DATETIME" 00112 #define ZIMSqlDataTypeDouble @"DOUBLE" 00113 #define ZIMSqlDataTypeDoublePrecision @"DOUBLE PRECISION" 00114 #define ZIMSqlDataTypeFloat @"FLOAT" 00115 #define ZIMSqlDataTypeInt @"INT" 00116 #define ZIMSqlDataTypeInt2 @"INT2" 00117 #define ZIMSqlDataTypeInt8 @"INT8" 00118 #define ZIMSqlDataTypeInteger @"INTEGER" 00119 #define ZIMSqlDataTypeMediumInt @"MEDIUMINT" 00120 #define ZIMSqlDataTypeNumeric @"NUMERIC" 00121 #define ZIMSqlDataTypeReal @"REAL" 00122 #define ZIMSqlDataTypeSmallInt @"SMALLINT" 00123 #define ZIMSqlDataTypeText @"TEXT" 00124 #define ZIMSqlDataTypeTimestamp @"TIMESTAMP" 00125 #define ZIMSqlDataTypeTinyInt @"TINYINT" 00126 #define ZIMSqlDataTypeUnsignedBigInt @"UNSIGNED BIG INT" 00127 #define ZIMSqlDataTypeVariant @"VARIANT" 00128 NSString *ZIMSqlDataTypeChar(NSUInteger x); 00129 NSString *ZIMSqlDataTypeCharacter(NSUInteger x); 00130 NSString *ZIMSqlDataTypeDecimal(NSUInteger x, NSUInteger y); 00131 NSString *ZIMSqlDataTypeNativeCharacter(NSUInteger x); 00132 NSString *ZIMSqlDataTypeNChar(NSUInteger x); 00133 NSString *ZIMSqlDataTypeNVarChar(NSUInteger x); 00134 NSString *ZIMSqlDataTypeVarChar(NSUInteger x); 00135 NSString *ZIMSqlDataTypeVaryingCharacter(NSUInteger x); 00136 00142 @interface ZIMSqlExpression : NSObject { 00143 00144 @protected 00145 NSString *_expression; 00146 00147 } 00148 00156 - (instancetype) initWithSqlExpression: (NSString *)sql; 00163 - (NSString *) expression; 00171 + (ZIMSqlExpression *) sql: (NSString *)sql; 00179 + (NSString *) prepareAlias: (NSString *)token; 00187 + (NSString *) prepareConnector: (NSString *)token; 00195 + (NSString *) prepareEnclosure: (NSString *)token; 00203 + (NSString *) prepareIdentifier: (id)identifier; 00211 + (NSString *) prepareJoinType: (NSString *)token; 00220 + (NSString *) prepareOperator: (NSString *)operator ofType: (NSString *)type; 00229 + (NSString *) prepareSortOrder: (BOOL)descending; 00237 + (NSString *) prepareSortWeight: (NSString *)weight; 00248 + (NSString *) prepareValue: (id)value; 00249 00250 @end