objective-c-sql-query-builder
ZIMSqlExpression.h
Go to the documentation of this file.
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
 All Classes Files Functions Variables Properties Defines