├── .gitignore ├── LICENSE ├── README.md ├── SQLG.Condition.pas ├── SQLG.CreateTable.pas ├── SQLG.Field.pas ├── SQLG.Params.pas ├── SQLG.Select.pas ├── SQLG.Table.pas ├── SQLG.Types.pas ├── SQLG.dpr ├── SQLG.dproj ├── SQLG.dproj.local ├── SQLG.dsk ├── SQLG.identcache └── SQLG.res /.gitignore: -------------------------------------------------------------------------------- 1 | /__history 2 | *.~* 3 | /Win32/* 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 HemulGM 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SQLGenerator 2 | 3 | ```pascal 4 | uses 5 | System.SysUtils, 6 | System.TypInfo, 7 | System.Rtti, 8 | SQLG.Table in 'SQLG.Table.pas', 9 | SQLG.Field in 'SQLG.Field.pas', 10 | SQLG.Condition in 'SQLG.Condition.pas', 11 | SQLG.Params in 'SQLG.Params.pas', 12 | SQLG.Select in 'SQLG.Select.pas', 13 | SQLG.CreateTable in 'SQLG.CreateTable.pas', 14 | SQLG.Types in 'SQLG.Types.pas'; 15 | 16 | type 17 | [TableName('user')] 18 | TUser = class(TSQLTable) 19 | [FieldName('id'), 20 | UNIQUE, 21 | PRIMARYKEY] 22 | Id: TFGUID; 23 | [FieldName('role_id')] 24 | RoleId: TFGUID; 25 | [FieldName('status')] 26 | Status: TFInteger; 27 | [FieldName('name')] 28 | Name: TFString; 29 | end; 30 | 31 | [TableName('user_role')] 32 | TUserRole = class(TSQLTable) 33 | [FieldName('id')] 34 | Id: TFGUID; 35 | [FieldName('type')] 36 | RoleType: TFInteger; 37 | [FieldName('desc')] 38 | Desc: TFString; 39 | [FieldName('name'), 40 | LENGTH(20)] 41 | Name: TFVARCHAR; 42 | end; 43 | 44 | procedure Test; 45 | begin 46 | var User := TUser.Create; 47 | var UserRole := TUserRole.Create; 48 | 49 | var Params: TSQLParams; 50 | var Sel := 51 | Select([User, UserRole.Desc.Table('ur').&As('description')]). 52 | From(User). 53 | LeftJoin( 54 | Select('*'). 55 | From(UserRole).Where(UserRole.RoleType = 1), 'ur'). 56 | on(User.RoleId = UserRole.Id.Table('ur')). 57 | Where(not (User.Id = TGUID.NewGuid) or (User.Status in [1, 2, 3])). 58 | Where(User.Status and 1 = 0). 59 | Where(User.Name = 'Dan'). 60 | Where(User.Status in 61 | Select(User.Status).From(User).Where(User.RoleId in [TGUID.NewGuid, TGUID.NewGuid])). 62 | OrderBy([User.Name, DESC(User.Status)]). 63 | GroupBy([User.Id]); 64 | 65 | writeln(Sel.Build(Params)); 66 | writeln; 67 | for var Param in Params do 68 | writeln(Param.Key, ': ', Param.Value.TypeInfo.Name, ' = ', Param.ToString); 69 | 70 | User.Free; 71 | UserRole.Free; 72 | end; 73 | 74 | begin 75 | try 76 | Test; 77 | except 78 | on E: Exception do 79 | Writeln(E.ClassName, ': ', E.Message); 80 | end; 81 | Readln; 82 | end. 83 | 84 | ``` 85 | 86 | output 87 | 88 | ``` 89 | SELECT user.*, ur.desc description 90 | FROM user 91 | LEFT JOIN ( 92 | SELECT * 93 | FROM user_role 94 | WHERE user_role.type = :p0) ur ON user.role_id = ur.id 95 | WHERE (NOT (user.id = :p1)) OR (user.status in (:p2, :p3, :p4)) AND user.status & 1 = :p5 AND user.name = :p6 AND user.status in ( 96 | SELECT user.status 97 | FROM user 98 | WHERE user.role_id in (:p7, :p8)) 99 | ORDER BY user.name, user.status DESC 100 | GROUP BY user.id 101 | 102 | p0: Integer = 1 103 | p1: TGUID = {4D8FD3C0-9972-4269-BBB6-34E3925EABE2} 104 | p2: Integer = 1 105 | p3: Integer = 2 106 | p4: Integer = 3 107 | p5: Integer = 0 108 | p6: string = Dan 109 | p7: TGUID = {2A37B58A-3B2F-4320-9850-A70AA70C3971} 110 | p8: TGUID = {3FBC11F6-381F-4443-8592-1E5FC5CDF479} 111 | ``` -------------------------------------------------------------------------------- /SQLG.Condition.pas: -------------------------------------------------------------------------------- 1 | unit SQLG.Condition; 2 | 3 | interface 4 | 5 | uses 6 | System.SysUtils, System.Rtti, SQLG.Params; 7 | 8 | type 9 | TSQLConditionOperation = ( 10 | // AND 11 | coAnd, 12 | // OR 13 | coOr, 14 | // NOT 15 | coNot, 16 | // XOR 17 | coXOr, 18 | // = 19 | coEqual, 20 | // <> 21 | coNotEqual, 22 | // < 23 | coLessThan, 24 | // <= 25 | coLessThanOrEqual, 26 | // > 27 | coGreaterThan, 28 | // >= 29 | coGreaterThanOrEqual, 30 | // IN 31 | coIn, 32 | // + 33 | coAdd); 34 | 35 | TSQLConditionOperationHelper = record helper for TSQLConditionOperation 36 | function ToString: string; 37 | end; 38 | 39 | TSQLCondition = record 40 | Op: TSQLConditionOperation; 41 | Left, Right: TValue; 42 | class operator LogicalAnd(Left, Right: TSQLCondition): TSQLCondition; 43 | class operator LogicalOr(Left, Right: TSQLCondition): TSQLCondition; 44 | class operator LogicalNot(Right: TSQLCondition): TSQLCondition; 45 | function Build(var Params: TSQLParams; const Level: Integer = -1): string; 46 | end; 47 | 48 | implementation 49 | 50 | uses 51 | SQLG.Select; 52 | 53 | function TSQLCondition.Build(var Params: TSQLParams; const Level: Integer): string; 54 | begin 55 | Result := ''; 56 | if Left.IsType(False) then 57 | begin 58 | var Param := Left.AsType; 59 | Param.Key := 'p' + Length(Params).ToString; 60 | Params := Params + [Param]; 61 | Result := Result + ':' + Param.Key; 62 | end 63 | else if Left.IsType>(False) then 64 | begin 65 | var AParam := Left.AsType>; 66 | var InVal: TArray := []; 67 | for var LParam in AParam do 68 | begin 69 | var Param := LParam; 70 | Param.Key := 'p' + Length(Params).ToString; 71 | Params := Params + [Param]; 72 | InVal := InVal + [':' + Param.Key]; 73 | end; 74 | if Length(InVal) > 0 then 75 | Result := Result + '(' + string.Join(', ', InVal) + ')'; 76 | end 77 | else if Left.IsType(False) then 78 | begin 79 | var Cond := Left.AsType; 80 | Result := Result + '(' + Cond.Build(Params, Level + 1) + ')'; 81 | end 82 | else if Left.IsType(False) then 83 | begin 84 | var Select := Left.AsType; 85 | Result := Result + '(' + Select.Build(Params, '', Level + 1) + ')'; 86 | end 87 | else if Left.IsType(False) then 88 | Result := Result + Left.AsString; 89 | 90 | if Result.IsEmpty then 91 | Result := Op.ToString + ' ' 92 | else 93 | Result := Result + ' ' + Op.ToString + ' '; 94 | 95 | if Right.IsType(False) then 96 | begin 97 | var Param := Right.AsType; 98 | Param.Key := 'p' + Length(Params).ToString; 99 | Params := Params + [Param]; 100 | Result := Result + ':' + Param.Key; 101 | end 102 | else if Right.IsType>(False) then 103 | begin 104 | var AParam := Right.AsType>; 105 | var InVal: TArray := []; 106 | for var LParam in AParam do 107 | begin 108 | var Param := LParam; 109 | Param.Key := 'p' + Length(Params).ToString; 110 | Params := Params + [Param]; 111 | InVal := InVal + [':' + Param.Key]; 112 | end; 113 | if Length(InVal) > 0 then 114 | Result := Result + '(' + string.Join(', ', InVal) + ')'; 115 | end 116 | else if Right.IsType(False) then 117 | begin 118 | var Cond := Right.AsType; 119 | Result := Result + '(' + Cond.Build(Params, Level + 1) + ')'; 120 | end 121 | else if Right.IsType(False) then 122 | begin 123 | var Select := Right.AsType; 124 | Result := Result + '(' + Select.Build(Params, '', Level + 1) + ')'; 125 | end 126 | else if Right.IsType(False) then 127 | Result := Result + Right.AsString; 128 | end; 129 | 130 | class operator TSQLCondition.LogicalAnd(Left, Right: TSQLCondition): TSQLCondition; 131 | begin 132 | Result.Op := coAnd; 133 | Result.Left := TValue.From(Left); 134 | Result.Right := TValue.From(Right); 135 | end; 136 | 137 | class operator TSQLCondition.LogicalNot(Right: TSQLCondition): TSQLCondition; 138 | begin 139 | Result.Op := coNot; 140 | Result.Left := TValue.Empty; 141 | Result.Right := TValue.From(Right); 142 | end; 143 | 144 | class operator TSQLCondition.LogicalOr(Left, Right: TSQLCondition): TSQLCondition; 145 | begin 146 | Result.Op := coOr; 147 | Result.Left := TValue.From(Left); 148 | Result.Right := TValue.From(Right); 149 | end; 150 | 151 | { TSQLConditionOperationHelper } 152 | 153 | function TSQLConditionOperationHelper.ToString: string; 154 | begin 155 | case Self of 156 | coAnd: 157 | Exit('AND'); 158 | coOr: 159 | Exit('OR'); 160 | coNot: 161 | Exit('NOT'); 162 | coEqual: 163 | Exit('='); 164 | coNotEqual: 165 | Exit('<>'); 166 | coLessThan: 167 | Exit('<'); 168 | coLessThanOrEqual: 169 | Exit('<='); 170 | coGreaterThan: 171 | Exit('>'); 172 | coGreaterThanOrEqual: 173 | Exit('>='); 174 | coIn: 175 | Exit('in'); 176 | end; 177 | end; 178 | 179 | end. 180 | 181 | -------------------------------------------------------------------------------- /SQLG.CreateTable.pas: -------------------------------------------------------------------------------- 1 | unit SQLG.CreateTable; 2 | 3 | interface 4 | 5 | uses 6 | System.SysUtils, System.Rtti, SQLG.Params, SQLG.Table; 7 | 8 | type 9 | TSQLCreateTable = record 10 | private 11 | FTable: TSQLTable; 12 | FIfNotExists: Boolean; 13 | public 14 | function Build(var Params: TSQLParams): string; 15 | end; 16 | 17 | function CreateTable(const Table: TSQLTable): TSQLCreateTable; overload; 18 | 19 | function CreateTableIfNotExists(const Table: TSQLTable): TSQLCreateTable; overload; 20 | 21 | implementation 22 | 23 | function CreateTableIfNotExists(const Table: TSQLTable): TSQLCreateTable; 24 | begin 25 | Result.FTable := Table; 26 | Result.FIfNotExists := True; 27 | end; 28 | 29 | function CreateTable(const Table: TSQLTable): TSQLCreateTable; 30 | begin 31 | Result.FTable := Table; 32 | Result.FIfNotExists := False; 33 | end; 34 | 35 | { TSQLCreateTable } 36 | 37 | function TSQLCreateTable.Build(var Params: TSQLParams): string; 38 | begin 39 | 40 | end; 41 | 42 | end. 43 | 44 | -------------------------------------------------------------------------------- /SQLG.Field.pas: -------------------------------------------------------------------------------- 1 | unit SQLG.Field; 2 | 3 | interface 4 | 5 | uses 6 | System.SysUtils, System.Rtti, SQLG.Condition, SQLG.Select, SQLG.Params, 7 | System.TypInfo; 8 | 9 | type 10 | TTableField = record 11 | public 12 | FieldName: string; 13 | TableName: string; 14 | Attributes: TArray; 15 | Alias: string; 16 | class operator Equal(Left, Right: TTableField): TSQLCondition; 17 | class operator Equal(Left: TTableField; Right: T): TSQLCondition; 18 | class operator NotEqual(Left: TTableField; Right: TTableField): TSQLCondition; 19 | // 20 | class operator in(Left: TTableField; Right: TArray): TSQLCondition; 21 | class operator in(Left: TTableField; Right: TSQLSelect): TSQLCondition; 22 | // 23 | class operator Implicit(Left: TTableField): TValue; 24 | // 25 | class operator Add(Left, Right: TTableField): TSQLCondition; 26 | // 27 | class operator LogicalAnd(Left: TTableField; Right: Integer): TTableField; 28 | class operator LogicalOr(Left: TTableField; Right: Integer): TTableField; 29 | class operator LogicalXOr(Left, Right: TTableField): TSQLCondition; 30 | class operator LogicalNot(Left: TTableField): TTableField; 31 | // 32 | class operator LeftShift(Left: TTableField; Right: Integer): TTableField; 33 | class operator RightShift(Left: TTableField; Right: Integer): TTableField; 34 | // 35 | class operator BitwiseXOr(Left: TTableField; Right: Integer): TTableField; 36 | // 37 | constructor Create(ATableName, AFieldName: string); 38 | function FullFieldName: string; 39 | function Table(const TableName: string): TTableField; 40 | function &As(const Value: string): TTableField; 41 | end; 42 | 43 | Field = record 44 | type 45 | TypeReal = TTableField; 46 | 47 | 48 | TFInteger = TTableField; 49 | 50 | 51 | TFString = TTableField; 52 | 53 | 54 | TFVARCHAR = TTableField; 55 | 56 | 57 | TFGUID = TTableField; 58 | end; 59 | { 60 | bigint, 61 | bit, 62 | bit varying, 63 | boolean, 64 | char, 65 | character varying, 66 | character, 67 | varchar, 68 | date, 69 | double precision, 70 | integer, 71 | interval, 72 | numeric, 73 | decimal, 74 | real, 75 | smallint, 76 | time (with or without time zone), 77 | timestamp (with or without time zone), 78 | xml } 79 | 80 | TFFloat = TTableField; 81 | 82 | TFInteger = TTableField; 83 | 84 | TFString = TTableField; 85 | 86 | TFVARCHAR = TTableField; 87 | 88 | TFGUID = TTableField; 89 | 90 | 91 | function IsSQLField(const Value: TValue): Boolean; 92 | 93 | function GetFieldName(const Value: TValue): string; overload; 94 | 95 | function GetFieldName(const TableAlias: string; const Value: TValue): string; overload; 96 | 97 | implementation 98 | 99 | uses 100 | System.StrUtils; 101 | 102 | procedure ForEachFieldType(Proc: TProc); 103 | begin 104 | Proc(TTypeInfo(PTypeInfo(TypeInfo(TFInteger))^)); 105 | Proc(TTypeInfo(PTypeInfo(TypeInfo(TFFloat))^)); 106 | Proc(TTypeInfo(PTypeInfo(TypeInfo(TFString))^)); 107 | Proc(TTypeInfo(PTypeInfo(TypeInfo(TFVARCHAR))^)); 108 | Proc(TTypeInfo(PTypeInfo(TypeInfo(TFGUID))^)); 109 | end; 110 | 111 | function IsSQLField(const Value: TValue): Boolean; 112 | begin 113 | if Value.IsType(False) then 114 | Exit(True) 115 | else if Value.IsType(False) then 116 | Exit(True) 117 | else if Value.IsType(False) then 118 | Exit(True); 119 | Result := False; 120 | end; 121 | 122 | function GetFieldName(const Value: TValue): string; 123 | begin 124 | if Value.IsType(False) then 125 | Exit(Value.AsType(False).FullFieldName) 126 | else if Value.IsType(False) then 127 | Exit(Value.AsType(False).FullFieldName) 128 | else if Value.IsType(False) then 129 | Exit(Value.AsType(False).FullFieldName); 130 | Result := ''; 131 | end; 132 | 133 | function GetFieldName(const TableAlias: string; const Value: TValue): string; 134 | begin 135 | if TableAlias.IsEmpty then 136 | Exit(GetFieldName(Value)); 137 | if Value.IsType(False) then 138 | begin 139 | var FField := Value.AsType(False); 140 | Exit(TableAlias + '.' + FField.FieldName + IfThen(not FField.Alias.IsEmpty, ' ' + FField.Alias)); 141 | end 142 | else if Value.IsType(False) then 143 | begin 144 | var FField := Value.AsType(False); 145 | Exit(TableAlias + '.' + FField.FieldName + IfThen(not FField.Alias.IsEmpty, ' ' + FField.Alias)); 146 | end 147 | else if Value.IsType(False) then 148 | begin 149 | var FField := Value.AsType(False); 150 | Exit(TableAlias + '.' + FField.FieldName + IfThen(not FField.Alias.IsEmpty, ' ' + FField.Alias)); 151 | end; 152 | Result := ''; 153 | end; 154 | 155 | { TTableField } 156 | 157 | class operator TTableField.Add(Left, Right: TTableField): TSQLCondition; 158 | begin 159 | Result.Left := Left.FullFieldName; 160 | Result.Right := Right.FullFieldName; 161 | Result.Op := TSQLConditionOperation.coAdd; 162 | end; 163 | 164 | function TTableField. &As(const Value: string): TTableField; 165 | begin 166 | Result := Self; 167 | Result.Alias := Value; 168 | end; 169 | 170 | constructor TTableField.Create(ATableName, AFieldName: string); 171 | begin 172 | FieldName := AFieldName; 173 | TableName := ATableName; 174 | end; 175 | 176 | class operator TTableField.Equal(Left, Right: TTableField): TSQLCondition; 177 | begin 178 | Result.Left := Left.FullFieldName; 179 | Result.Right := Right.FullFieldName; 180 | Result.Op := TSQLConditionOperation.coEqual; 181 | end; 182 | 183 | class operator TTableField.Equal(Left: TTableField; Right: T): TSQLCondition; 184 | begin 185 | Result.Left := Left.FullFieldName; 186 | Result.Right := TValue.From(Param('', TValue.From(Right))); 187 | Result.Op := TSQLConditionOperation.coEqual; 188 | end; 189 | 190 | function TTableField.FullFieldName: string; 191 | begin 192 | Result := TableName + '.' + FieldName + IfThen(not Alias.IsEmpty, ' ' + Alias); 193 | end; 194 | 195 | class operator TTableField.Implicit(Left: TTableField): TValue; 196 | begin 197 | Result := TValue.From(Left); 198 | end; 199 | 200 | class operator TTableField.in(Left: TTableField; Right: TSQLSelect): TSQLCondition; 201 | begin 202 | Result.Left := Left.FullFieldName; 203 | Result.Right := TValue.From(Right); 204 | Result.Op := TSQLConditionOperation.coIn; 205 | end; 206 | 207 | class operator TTableField.in(Left: TTableField; Right: TArray): TSQLCondition; 208 | begin 209 | Result.Left := Left.FullFieldName; 210 | Result.Right := TValue.From(TParams.Params('', Right)); 211 | Result.Op := TSQLConditionOperation.coIn; 212 | end; 213 | 214 | class operator TTableField.LeftShift(Left: TTableField; Right: Integer): TTableField; 215 | begin 216 | Result := Left; 217 | Result.FieldName := Left.FieldName + ' << ' + Right.ToString; 218 | end; 219 | 220 | class operator TTableField.LogicalAnd(Left: TTableField; Right: Integer): TTableField; 221 | begin 222 | Result := Left; 223 | Result.FieldName := Left.FieldName + ' & ' + Right.ToString; 224 | end; 225 | 226 | class operator TTableField.LogicalNot(Left: TTableField): TTableField; 227 | begin 228 | Result := Left; 229 | Result.FieldName := ' ~ ' + Left.FieldName; 230 | end; 231 | 232 | class operator TTableField.LogicalOr(Left: TTableField; Right: Integer): TTableField; 233 | begin 234 | Result := Left; 235 | Result.FieldName := Left.FieldName + ' | ' + Right.ToString; 236 | end; 237 | 238 | class operator TTableField.LogicalXOr(Left, Right: TTableField): TSQLCondition; 239 | begin 240 | 241 | end; 242 | 243 | class operator TTableField.BitwiseXOr(Left: TTableField; Right: Integer): TTableField; 244 | begin 245 | Result := Left; 246 | Result.FieldName := Left.FieldName + ' # ' + Right.ToString; 247 | end; 248 | 249 | class operator TTableField.NotEqual(Left, Right: TTableField): TSQLCondition; 250 | begin 251 | Result.Left := Left.FullFieldName; 252 | Result.Right := Right.FullFieldName; 253 | Result.Op := TSQLConditionOperation.coNotEqual; 254 | end; 255 | 256 | class operator TTableField.RightShift(Left: TTableField; Right: Integer): TTableField; 257 | begin 258 | Result := Left; 259 | Result.FieldName := Left.FieldName + ' >> ' + Right.ToString; 260 | end; 261 | 262 | function TTableField.Table(const TableName: string): TTableField; 263 | begin 264 | Result := Self; 265 | Result.TableName := TableName; 266 | end; 267 | 268 | end. 269 | 270 | -------------------------------------------------------------------------------- /SQLG.Params.pas: -------------------------------------------------------------------------------- 1 | unit SQLG.Params; 2 | 3 | interface 4 | 5 | uses 6 | System.Rtti, System.SysUtils; 7 | 8 | type 9 | TSQLParam = record 10 | Key: string; 11 | Value: TValue; 12 | AsType: string; 13 | function KeyWithCast: string; 14 | constructor Create(const Key: string; const Value: TValue); 15 | function ToString: string; 16 | end; 17 | 18 | TSQLParams = TArray; 19 | 20 | TEmptyGUID = record 21 | class function Create: TEmptyGUID; static; 22 | end; 23 | 24 | TParams = class 25 | class function Params(const Name: string; const Values: TArray; AsType: string = ''): TArray; 26 | end; 27 | 28 | function Param(const Name: string; const Value: TValue; AsType: string = ''): TSQLParam; overload; 29 | 30 | function Param(const Name: string; const Value: TGUID; AsType: string = ''): TSQLParam; overload; 31 | 32 | function Params(const Name: string; const Values: TArray; AsType: string = ''): TArray; overload; 33 | 34 | function Params(const Name: string; const Values: TArray; AsType: string = ''): TArray; overload; 35 | 36 | function Params(const Name: string; const Values: TArray; AsType: string = ''): TArray; overload; 37 | 38 | function ToJson: string; 39 | 40 | function CreateGUID(const Value: TGUID): TValue; overload; 41 | 42 | function CreateGUID(const Value: string): TValue; overload; 43 | 44 | implementation 45 | 46 | function CreateGUID(const Value: TGUID): TValue; 47 | begin 48 | Result := TValue.From(Value); 49 | end; 50 | 51 | function CreateGUID(const Value: string): TValue; 52 | begin 53 | if Value = '' then 54 | Result := TValue.From(TEmptyGUID.Create) 55 | else 56 | Result := TValue.From(TGUID.Create(Value)); 57 | end; 58 | 59 | function Param(const Name: string; const Value: TValue; AsType: string = ''): TSQLParam; 60 | begin 61 | Result := TSQLParam.Create(Name, Value); 62 | Result.AsType := AsType; 63 | end; 64 | 65 | function Param(const Name: string; const Value: TGUID; AsType: string = ''): TSQLParam; 66 | begin 67 | Result := TSQLParam.Create(Name, CreateGUID(Value)); 68 | Result.AsType := AsType; 69 | end; 70 | 71 | function Params(const Name: string; const Values: TArray; AsType: string = ''): TArray; 72 | begin 73 | for var Value in Values do 74 | begin 75 | var Param := TSQLParam.Create(Name, Value); 76 | Param.AsType := AsType; 77 | Result := Result + [Param]; 78 | end; 79 | end; 80 | 81 | function Params(const Name: string; const Values: TArray; AsType: string = ''): TArray; 82 | begin 83 | for var Value in Values do 84 | begin 85 | var Param := TSQLParam.Create(Name, Value); 86 | Param.AsType := AsType; 87 | Result := Result + [Param]; 88 | end; 89 | end; 90 | 91 | function Params(const Name: string; const Values: TArray; AsType: string = ''): TArray; 92 | begin 93 | for var Value in Values do 94 | begin 95 | var Param := TSQLParam.Create(Name, CreateGUID(Value)); 96 | Param.AsType := AsType; 97 | Result := Result + [Param]; 98 | end; 99 | end; 100 | 101 | function ToJson: string; 102 | begin 103 | Result := 'to_json'; 104 | end; 105 | 106 | { TSQLParam } 107 | 108 | constructor TSQLParam.Create(const Key: string; const Value: TValue); 109 | begin 110 | Self.Key := Key; 111 | Self.Value := Value; 112 | end; 113 | 114 | function TSQLParam.KeyWithCast: string; 115 | begin 116 | if AsType.IsEmpty then 117 | Result := ':' + Key 118 | else if AsType = ToJson then 119 | Result := 'to_json(:' + Key + ')' 120 | else 121 | Result := 'CAST(:' + Key + ' as ' + AsType + ')'; 122 | end; 123 | 124 | function TSQLParam.ToString: string; 125 | begin 126 | if Value.IsType(False) then 127 | Exit(Value.AsType.ToString); 128 | try 129 | Result := Value.ToString; 130 | except 131 | Result := '?'; 132 | end; 133 | end; 134 | 135 | { TEmptyGUID } 136 | 137 | class function TEmptyGUID.Create: TEmptyGUID; 138 | begin 139 | // empty 140 | end; 141 | 142 | { TParams } 143 | 144 | class function TParams.Params(const Name: string; const Values: TArray; AsType: string): TArray; 145 | begin 146 | for var Value in Values do 147 | begin 148 | var Param := TSQLParam.Create(Name, TValue.From(Value)); 149 | Param.AsType := AsType; 150 | Result := Result + [Param]; 151 | end; 152 | end; 153 | 154 | end. 155 | 156 | -------------------------------------------------------------------------------- /SQLG.Select.pas: -------------------------------------------------------------------------------- 1 | unit SQLG.Select; 2 | 3 | interface 4 | 5 | uses 6 | System.SysUtils, System.Rtti, SQLG.Params, SQLG.Table, SQLG.Condition; 7 | 8 | type 9 | TOrderField = record 10 | Field: TValue; 11 | OrderType: string; 12 | class operator Implicit(Left: TOrderField): TValue; 13 | end; 14 | 15 | TSQLSelect = record 16 | type 17 | TSQLJoin = record 18 | private 19 | FParent: TValue; 20 | FSelect: TValue; 21 | FSelectName: string; 22 | FOn: TSQLCondition; 23 | FPredict: string; 24 | FTable: TSQLTable; 25 | public 26 | function &On(const Condition: TSQLCondition): TSQLSelect; 27 | function Build(var Params: TSQLParams; const Level: Integer = -1): string; 28 | end; 29 | private 30 | FFields: TArray; 31 | FFroms: TArray; 32 | FWheres: TArray; 33 | FJoins: TArray; 34 | FOrderBy: TArray; 35 | FGroupBy: TArray; 36 | public 37 | function Build(var Params: TSQLParams; const Alias: string = ''; const Level: Integer = -1): string; 38 | function From(const Items: TArray): TSQLSelect; overload; 39 | function From(const Item: TValue): TSQLSelect; overload; 40 | function Where(const Condition: TSQLCondition): TSQLSelect; 41 | function Join(const Table: TSQLTable): TSQLJoin; overload; 42 | function Join(const Select: TSQLSelect; const Alias: string): TSQLJoin; overload; 43 | function LeftJoin(const Table: TSQLTable): TSQLJoin; overload; 44 | function LeftJoin(const Select: TSQLSelect; const Alias: string): TSQLJoin; overload; 45 | function RightJoin(const Table: TSQLTable): TSQLJoin; overload; 46 | function RightJoin(const Select: TSQLSelect; const Alias: string): TSQLJoin; overload; 47 | function OrderBy(const Fields: TArray): TSQLSelect; overload; 48 | function OrderBy(const Field: TValue): TSQLSelect; overload; 49 | function GroupBy(const Fields: TArray): TSQLSelect; overload; 50 | function GroupBy(const Field: TValue): TSQLSelect; overload; 51 | end; 52 | 53 | function Select(Fields: TArray): TSQLSelect; overload; 54 | 55 | function Select(Fields: TValue): TSQLSelect; overload; 56 | 57 | function ASC(Field: TValue): TOrderField; 58 | 59 | function DESC(Field: TValue): TOrderField; 60 | 61 | implementation 62 | 63 | uses 64 | SQLG.Field; 65 | 66 | function Select(Fields: TArray): TSQLSelect; 67 | begin 68 | Result.FFields := Fields; 69 | end; 70 | 71 | function Select(Fields: TValue): TSQLSelect; 72 | begin 73 | Result.FFields := [Fields]; 74 | end; 75 | 76 | function ASC(Field: TValue): TOrderField; 77 | begin 78 | Result.Field := Field; 79 | Result.OrderType := 'ASC'; 80 | end; 81 | 82 | function DESC(Field: TValue): TOrderField; 83 | begin 84 | Result.Field := Field; 85 | Result.OrderType := 'DESC'; 86 | end; 87 | 88 | { TSQLSelect } 89 | 90 | function TSQLSelect.Build(var Params: TSQLParams; const Alias: string; const Level: Integer): string; 91 | begin 92 | // SELECT 93 | var FieldList: TArray; 94 | for var Field in FFields do 95 | begin 96 | if Field.IsType(False) then 97 | FieldList := FieldList + [Field.AsType(False).TableName + '.*'] 98 | else if IsSQLField(Field) then 99 | FieldList := FieldList + [GetFieldName(Alias, Field)] 100 | else if Field.IsType(False) then 101 | FieldList := FieldList + [Field.AsString]; 102 | end; 103 | if Level >= 0 then 104 | Result := Result + #13#10; 105 | for var i := 0 to Level do 106 | Result := Result + ' '; 107 | Result := Result + 'SELECT ' + string.Join(', ', FieldList); 108 | 109 | // FROM 110 | if Length(FFroms) > 0 then 111 | begin 112 | Result := Result + #13#10; 113 | for var i := 0 to Level do 114 | Result := Result + ' '; 115 | var FromList: TArray; 116 | for var From in FFroms do 117 | begin 118 | if From.IsType(False) then 119 | begin 120 | FromList := FromList + [From.AsType(False).TableName]; 121 | end; 122 | end; 123 | Result := Result + ' FROM ' + string.Join(', ', FromList); 124 | end; 125 | 126 | // JOIN 127 | if Length(FJoins) > 0 then 128 | begin 129 | Result := Result + #13#10; 130 | for var i := 0 to Level do 131 | Result := Result + ' '; 132 | var JoinList: TArray; 133 | for var Join in FJoins do 134 | JoinList := JoinList + [Join.Build(Params, Level + 1)]; 135 | Result := Result + string.Join(#13#10, JoinList); 136 | end; 137 | 138 | // WHERE 139 | if Length(FWheres) > 0 then 140 | begin 141 | Result := Result + #13#10; 142 | for var i := 0 to Level do 143 | Result := Result + ' '; 144 | var WhereList: TArray; 145 | for var Where in FWheres do 146 | WhereList := WhereList + [Where.Build(Params, Level + 1)]; 147 | Result := Result + ' WHERE ' + string.Join(' AND ', WhereList); 148 | end; 149 | 150 | // ORDER BY 151 | if Length(FOrderBy) > 0 then 152 | begin 153 | Result := Result + #13#10; 154 | for var i := 0 to Level do 155 | Result := Result + ' '; 156 | var OrderList: TArray; 157 | for var OrderBy in FOrderBy do 158 | begin 159 | if IsSQLField(OrderBy) then 160 | OrderList := OrderList + [GetFieldName(Alias, OrderBy)] 161 | else if OrderBy.IsType(False) then 162 | OrderList := OrderList + [GetFieldName(Alias, OrderBy.AsType.Field) + ' ' + OrderBy.AsType.OrderType] 163 | end; 164 | Result := Result + ' ORDER BY ' + string.Join(', ', OrderList); 165 | end; 166 | 167 | // GROUP BY 168 | if Length(FGroupBy) > 0 then 169 | begin 170 | Result := Result + #13#10; 171 | for var i := 0 to Level do 172 | Result := Result + ' '; 173 | var GroupList: TArray; 174 | for var GroupBy in FGroupBy do 175 | begin 176 | if IsSQLField(GroupBy) then 177 | GroupList := GroupList + [GetFieldName(Alias, GroupBy)]; 178 | end; 179 | Result := Result + ' GROUP BY ' + string.Join(', ', GroupList); 180 | end; 181 | end; 182 | 183 | function TSQLSelect.From(const Items: TArray): TSQLSelect; 184 | begin 185 | FFroms := Items; 186 | Result := Self; 187 | end; 188 | 189 | function TSQLSelect.From(const Item: TValue): TSQLSelect; 190 | begin 191 | FFroms := FFroms + [Item]; 192 | Result := Self; 193 | end; 194 | 195 | function TSQLSelect.GroupBy(const Field: TValue): TSQLSelect; 196 | begin 197 | FGroupBy := FGroupBy + [Field]; 198 | Result := Self; 199 | end; 200 | 201 | function TSQLSelect.GroupBy(const Fields: TArray): TSQLSelect; 202 | begin 203 | FGroupBy := FGroupBy + Fields; 204 | Result := Self; 205 | end; 206 | 207 | function TSQLSelect.Join(const Select: TSQLSelect; const Alias: string): TSQLJoin; 208 | begin 209 | Result.FPredict := ' '; 210 | Result.FTable := nil; 211 | Result.FSelectName := Alias; 212 | Result.FSelect := TValue.From(Select); 213 | Result.FParent := TValue.From(Self); 214 | end; 215 | 216 | function TSQLSelect.LeftJoin(const Select: TSQLSelect; const Alias: string): TSQLJoin; 217 | begin 218 | Result.FPredict := ' LEFT '; 219 | Result.FTable := nil; 220 | Result.FSelectName := Alias; 221 | Result.FSelect := TValue.From(Select); 222 | Result.FParent := TValue.From(Self); 223 | end; 224 | 225 | function TSQLSelect.OrderBy(const Field: TValue): TSQLSelect; 226 | begin 227 | FOrderBy := FOrderBy + [Field]; 228 | Result := Self; 229 | end; 230 | 231 | function TSQLSelect.OrderBy(const Fields: TArray): TSQLSelect; 232 | begin 233 | FOrderBy := FOrderBy + Fields; 234 | Result := Self; 235 | end; 236 | 237 | function TSQLSelect.Join(const Table: TSQLTable): TSQLJoin; 238 | begin 239 | Result.FPredict := ' '; 240 | Result.FTable := Table; 241 | Result.FParent := TValue.From(Self); 242 | end; 243 | 244 | function TSQLSelect.LeftJoin(const Table: TSQLTable): TSQLJoin; 245 | begin 246 | Result.FPredict := ' LEFT '; 247 | Result.FTable := Table; 248 | Result.FParent := TValue.From(Self); 249 | end; 250 | 251 | function TSQLSelect.RightJoin(const Table: TSQLTable): TSQLJoin; 252 | begin 253 | Result.FPredict := ' RIGHT '; 254 | Result.FTable := Table; 255 | Result.FParent := TValue.From(Self); 256 | end; 257 | 258 | function TSQLSelect.Where(const Condition: TSQLCondition): TSQLSelect; 259 | begin 260 | FWheres := FWheres + [Condition]; 261 | Result := Self; 262 | end; 263 | 264 | function TSQLSelect.RightJoin(const Select: TSQLSelect; const Alias: string): TSQLJoin; 265 | begin 266 | Result.FPredict := ' RIGHT '; 267 | Result.FTable := nil; 268 | Result.FSelectName := Alias; 269 | Result.FSelect := TValue.From(Select); 270 | Result.FParent := TValue.From(Self); 271 | end; 272 | 273 | { TSQLSelect.TSQLJoin } 274 | 275 | function TSQLSelect.TSQLJoin.Build(var Params: TSQLParams; const Level: Integer): string; 276 | begin 277 | if FTable <> nil then 278 | Result := FPredict + 'JOIN ' + FTable.TableName 279 | else 280 | Result := FPredict + 'JOIN (' + FSelect.AsType.Build(Params, '', Level + 1) + ') ' + FSelectName; 281 | Result := Result + ' ON ' + FOn.Build(Params); 282 | end; 283 | 284 | function TSQLSelect.TSQLJoin.&On(const Condition: TSQLCondition): TSQLSelect; 285 | begin 286 | FOn := Condition; 287 | Result := FParent.AsType; 288 | Result.FJoins := Result.FJoins + [Self]; 289 | end; 290 | 291 | { TOrderField } 292 | 293 | class operator TOrderField.Implicit(Left: TOrderField): TValue; 294 | begin 295 | Result := TValue.From(Left); 296 | end; 297 | 298 | end. 299 | 300 | -------------------------------------------------------------------------------- /SQLG.Table.pas: -------------------------------------------------------------------------------- 1 | unit SQLG.Table; 2 | 3 | interface 4 | 5 | uses 6 | System.Rtti, SQLG.Types; 7 | 8 | type 9 | TSQLTable = class 10 | protected 11 | FTableName: string; 12 | public 13 | property TableName: string read FTableName; 14 | constructor Create; 15 | end; 16 | 17 | var 18 | Context: TRttiContext; 19 | 20 | implementation 21 | 22 | uses 23 | SQLG.Field; 24 | 25 | { TSQLTable } 26 | 27 | constructor TSQLTable.Create; 28 | begin 29 | inherited; 30 | var FClass := Context.GetType(Self.ClassType); 31 | if FClass.HasAttribute(TableNameAttribute) then 32 | FTableName := FClass.GetAttribute.Value; 33 | for var FField in FClass.GetFields do 34 | begin 35 | if FField.HasAttribute(FieldNameAttribute) then 36 | if FField.FieldType.IsRecord then 37 | begin 38 | if FField.GetValue(Self).IsType(False) then 39 | FField.SetValue(Self, TValue.From(TFInteger.Create(FTableName, FField.GetAttribute.Value))) 40 | else if FField.GetValue(Self).IsType(False) then 41 | FField.SetValue(Self, TValue.From(TFString.Create(FTableName, FField.GetAttribute.Value))) 42 | else if FField.GetValue(Self).IsType(False) then 43 | FField.SetValue(Self, TValue.From(TFGUID.Create(FTableName, FField.GetAttribute.Value))); 44 | end; 45 | end; 46 | end; 47 | 48 | end. 49 | 50 | -------------------------------------------------------------------------------- /SQLG.Types.pas: -------------------------------------------------------------------------------- 1 | unit SQLG.Types; 2 | 3 | interface 4 | 5 | uses 6 | System.Rtti, SQLG.Condition; 7 | 8 | type 9 | TCustomAttributeValue = class(TCustomAttribute) 10 | private 11 | FValue: T; 12 | public 13 | constructor Create(const Value: T); 14 | property Value: T read FValue; 15 | end; 16 | 17 | FieldNameAttribute = class(TCustomAttributeValue); 18 | 19 | TableNameAttribute = class(TCustomAttributeValue); 20 | 21 | DEFAULTAttribute = class(TCustomAttribute) 22 | private 23 | FValue: TValue; 24 | public 25 | constructor Create(const Value: Variant); 26 | property Value: TValue read FValue; 27 | end; 28 | 29 | UNIQUEAttribute = class(TCustomAttribute); 30 | 31 | NOTNULLAttribute = class(TCustomAttribute); 32 | 33 | PRIMARYKEYAttribute = class(TCustomAttribute); 34 | 35 | CHECKAttribute = class(TCustomAttributeValue); 36 | 37 | LENGTHAttribute = class(TCustomAttributeValue); 38 | 39 | implementation 40 | 41 | { TCustomAttributeValue } 42 | 43 | constructor TCustomAttributeValue.Create(const Value: T); 44 | begin 45 | inherited Create; 46 | FValue := Value; 47 | end; 48 | 49 | { DEFAULTAttribute } 50 | 51 | constructor DEFAULTAttribute.Create(const Value: Variant); 52 | begin 53 | inherited Create; 54 | FValue := TValue.From(Value); 55 | end; 56 | 57 | end. 58 | 59 | -------------------------------------------------------------------------------- /SQLG.dpr: -------------------------------------------------------------------------------- 1 | program SQLG; 2 | 3 | {$APPTYPE CONSOLE} 4 | 5 | {$R *.res} 6 | 7 | uses 8 | System.SysUtils, 9 | System.TypInfo, 10 | System.Rtti, 11 | SQLG.Table in 'SQLG.Table.pas', 12 | SQLG.Field in 'SQLG.Field.pas', 13 | SQLG.Condition in 'SQLG.Condition.pas', 14 | SQLG.Params in 'SQLG.Params.pas', 15 | SQLG.Select in 'SQLG.Select.pas', 16 | SQLG.CreateTable in 'SQLG.CreateTable.pas', 17 | SQLG.Types in 'SQLG.Types.pas'; 18 | 19 | type 20 | [TableName('user')] 21 | TUser = class(TSQLTable) 22 | [FieldName('id'), 23 | UNIQUE, 24 | PRIMARYKEY] 25 | Id: TFGUID; 26 | [FieldName('role_id')] 27 | RoleId: TFGUID; 28 | [FieldName('status')] 29 | Status: TFInteger; 30 | [FieldName('name')] 31 | Name: TFString; 32 | end; 33 | 34 | [TableName('user_role')] 35 | TUserRole = class(TSQLTable) 36 | [FieldName('id')] 37 | Id: TFGUID; 38 | [FieldName('type')] 39 | RoleType: TFInteger; 40 | [FieldName('desc')] 41 | Desc: TFString; 42 | [FieldName('name'), 43 | LENGTH(20)] 44 | Name: TFVARCHAR; 45 | end; 46 | 47 | procedure Test; 48 | begin 49 | var User := TUser.Create; 50 | var UserRole := TUserRole.Create; 51 | 52 | var Params: TSQLParams; 53 | var Sel := 54 | Select([User, UserRole.Desc.Table('ur').&As('description')]). 55 | From(User). 56 | LeftJoin( 57 | Select('*'). 58 | From(UserRole).Where(UserRole.RoleType = 1), 'ur'). 59 | on(User.RoleId = UserRole.Id.Table('ur')). 60 | Where(not (User.Id = TGUID.NewGuid) or (User.Status in [1, 2, 3])). 61 | Where(User.Status and 1 = 0). 62 | Where(User.Name = 'Dan'). 63 | Where(User.Status in 64 | Select(User.Status).From(User).Where(User.RoleId in [TGUID.NewGuid, TGUID.NewGuid])). 65 | OrderBy([User.Name, DESC(User.Status)]). 66 | GroupBy([User.Id]); 67 | 68 | writeln(Sel.Build(Params)); 69 | writeln; 70 | for var Param in Params do 71 | writeln(Param.Key, ': ', Param.Value.TypeInfo.Name, ' = ', Param.ToString); 72 | 73 | User.Free; 74 | UserRole.Free; 75 | end; 76 | 77 | begin 78 | try 79 | Test; 80 | except 81 | on E: Exception do 82 | Writeln(E.ClassName, ': ', E.Message); 83 | end; 84 | Readln; 85 | end. 86 | 87 | -------------------------------------------------------------------------------- /SQLG.dproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | {6DD84A52-9C27-45B0-A4D8-BF6C901435D2} 4 | 19.5 5 | None 6 | True 7 | Debug 8 | Win32 9 | 1 10 | Console 11 | SQLG.dpr 12 | 13 | 14 | true 15 | 16 | 17 | true 18 | Base 19 | true 20 | 21 | 22 | true 23 | Base 24 | true 25 | 26 | 27 | true 28 | Base 29 | true 30 | 31 | 32 | true 33 | Base 34 | true 35 | 36 | 37 | true 38 | Base 39 | true 40 | 41 | 42 | true 43 | Base 44 | true 45 | 46 | 47 | true 48 | Base 49 | true 50 | 51 | 52 | true 53 | Base 54 | true 55 | 56 | 57 | true 58 | Cfg_1 59 | true 60 | true 61 | 62 | 63 | true 64 | Base 65 | true 66 | 67 | 68 | .\$(Platform)\$(Config) 69 | .\$(Platform)\$(Config) 70 | false 71 | false 72 | false 73 | false 74 | false 75 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) 76 | SQLG 77 | 78 | 79 | fmx;DbxCommonDriver;bindengine;IndyIPCommon;emsclient;FireDACCommonDriver;FrameStandPackage_11_1;IndyProtocols;RadiantShapesFmx_Design;Skia.Package.RTL;IndyIPClient;dbxcds;bindcompfmx;FGXNative.Extension.Zint;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;inet;DataSnapCommon;FMXAudioHGM;fmxase;DzHTMLText_FMX;dbrtl;FireDACDBXDriver;Skia.Package.FMX;CustomIPTransport;DBXInterBaseDriver;IndySystem;RadiantShapesFmx;bindcomp;FireDACCommon;VLCPlayer;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;DataSnapFireDAC;emsclientfiredac;FireDAC;FireDACDSDriver;xmlrtl;tethering;dsnap;CloudService;DataSnapNativeClient;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) 80 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png 81 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png 82 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png 83 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png 84 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png 85 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png 86 | $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png 87 | $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png 88 | $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png 89 | $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png 90 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png 91 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png 92 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png 93 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png 94 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png 95 | activity-1.1.0.dex.jar;annotation-1.2.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;biometric-1.1.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.1.0.dex.jar;core-runtime-2.1.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.2.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.2.0.dex.jar;lifecycle-runtime-2.2.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.2.0.dex.jar;lifecycle-viewmodel-savedstate-2.2.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;savedstate-1.0.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.0.dex.jar 96 | 97 | 98 | fmx;DbxCommonDriver;bindengine;IndyIPCommon;emsclient;FireDACCommonDriver;FrameStandPackage_11_1;IndyProtocols;RadiantShapesFmx_Design;Skia.Package.RTL;IndyIPClient;dbxcds;bindcompfmx;FGXNative.Extension.Zint;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;inet;DataSnapCommon;FMXAudioHGM;DzHTMLText_FMX;dbrtl;FireDACDBXDriver;Skia.Package.FMX;CustomIPTransport;DBXInterBaseDriver;IndySystem;RadiantShapesFmx;bindcomp;FireDACCommon;VLCPlayer;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;DataSnapFireDAC;emsclientfiredac;FireDAC;FireDACDSDriver;xmlrtl;tethering;dsnap;CloudService;DataSnapNativeClient;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) 99 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png 100 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png 101 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png 102 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png 103 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png 104 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png 105 | $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png 106 | $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png 107 | $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png 108 | $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png 109 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png 110 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png 111 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png 112 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png 113 | $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png 114 | activity-1.1.0.dex.jar;annotation-1.2.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;biometric-1.1.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.1.0.dex.jar;core-runtime-2.1.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.2.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.2.0.dex.jar;lifecycle-runtime-2.2.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.2.0.dex.jar;lifecycle-viewmodel-savedstate-2.2.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;savedstate-1.0.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.0.dex.jar 115 | 116 | 117 | fmx;DbxCommonDriver;bindengine;IndyIPCommon;emsclient;FireDACCommonDriver;IndyProtocols;RadiantShapesFmx_Design;Skia.Package.RTL;IndyIPClient;dbxcds;bindcompfmx;FGXNative.Extension.Zint;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;inet;DataSnapCommon;fmxase;DzHTMLText_FMX;dbrtl;FireDACDBXDriver;Skia.Package.FMX;CustomIPTransport;DBXInterBaseDriver;IndySystem;RadiantShapesFmx;bindcomp;FireDACCommon;VLCPlayer;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;DataSnapFireDAC;emsclientfiredac;FireDAC;FireDACDSDriver;xmlrtl;tethering;dsnap;CloudService;DataSnapNativeClient;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) 118 | 119 | 120 | fmx;DbxCommonDriver;bindengine;IndyIPCommon;emsclient;FireDACCommonDriver;IndyProtocols;IndyIPClient;dbxcds;bindcompfmx;FireDACSqliteDriver;DbxClientDriver;soapmidas;fmxFireDAC;dbexpress;inet;DataSnapCommon;fmxase;dbrtl;FireDACDBXDriver;CustomIPTransport;DBXInterBaseDriver;IndySystem;bindcomp;FireDACCommon;IndyCore;RESTBackendComponents;bindcompdbx;rtl;RESTComponents;DBXSqliteDriver;IndyIPServer;dsnapxml;DataSnapClient;DataSnapProviderClient;DataSnapFireDAC;emsclientfiredac;FireDAC;FireDACDSDriver;xmlrtl;tethering;dsnap;CloudService;DataSnapNativeClient;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) 121 | 122 | 123 | DataSnapServer;fmx;emshosting;DbxCommonDriver;bindengine;FireDACCommonODBC;emsclient;FireDACCommonDriver;IndyProtocols;Skia.Package.RTL;dbxcds;emsedge;inetdb;FireDACSqliteDriver;DbxClientDriver;FireDACASADriver;soapmidas;dbexpress;FireDACInfxDriver;inet;DataSnapCommon;dbrtl;FireDACOracleDriver;Skia.Package.FMX;CustomIPTransport;FireDACMSSQLDriver;DataSnapIndy10ServerTransport;DataSnapConnectors;FireDACMongoDBDriver;IndySystem;RadiantShapesFmx;FireDACTDataDriver;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;VLCPlayer;IndyCore;RESTBackendComponents;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;dsnapxml;DataSnapClient;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;xmlrtl;dsnap;CloudService;FireDACDb2Driver;DataSnapNativeClient;DatasnapConnectorsFreePascal;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) 124 | 125 | 126 | vclwinx;DataSnapServer;fmx;emshosting;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;DBXMSSQLDriver;FireDACCommonODBC;emsclient;FireDACCommonDriver;FrameStandPackage_11_1;appanalytics;IndyProtocols;vclx;RadiantShapesFmx_Design;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;HGMComponents;emsedge;bindcompfmx;DBXFirebirdDriver;inetdb;FGXNative.Extension.Zint;HGMLineStorage;FireDACSqliteDriver;DbxClientDriver;FmxTrayIcon;FireDACASADriver;FmxTeeUI928;Tee;soapmidas;SVGIconImageListFMX;vclactnband;FGXNative.Externals;fmxFireDAC;dbexpress;FMXTree28;FireDACInfxDriver;CEF4DelphiVCLRTL;DBXMySQLDriver;FGXNative.Core;VclSmp;inet;DataSnapCommon;FMXAudioHGM;vcltouch;fmxase;DBXOdbcDriver;DzHTMLText_FMX;dbrtl;TGC_API;FireDACDBXDriver;FireDACOracleDriver;ComPortDrv;fmxdae;Skia.Package.FMX;FireDACMSAccDriver;CustomIPTransport;FireDACMSSQLDriver;SVGIconPackage;AbbreviaVCLD;DataSnapIndy10ServerTransport;CEF4DelphiFMXRTL;DataSnapConnectors;vclshlctrls;vcldsnap;DBXInterBaseDriver;FireDACMongoDBDriver;FMXPAN100;IndySystem;PngComponentsD;RvXmlFMXD11;RadiantShapesFmx;FireDACTDataDriver;Skia.Package.VCL;FMXTeeDB928;vcldb;DelphiDiagPlugin;OpenAIPackage;vclFireDAC;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;VLCPlayer;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;DataSnapClient;DataSnapProviderClient;adortl;RvHtmlFMXD11;FMXTee928;DBXSybaseASEDriver;DBXDb2Driver;vclimg;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;FireDACDSDriver;inetdbxpress;xmlrtl;tethering;ChatGptWizard;bindcompvcl;dsnap;CloudService;DBXSybaseASADriver;DBXOracleDriver;FireDACDb2Driver;DBXInformixDriver;VKComponents;RVPkgFMXD11;fmxobj;bindcompvclsmp;DataSnapNativeClient;DatasnapConnectorsFreePascal;soaprtl;SVGIconImageList;mbColorLibDXTokyo;soapserver;FireDACIBDriver;$(DCC_UsePackage) 127 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 128 | Debug 129 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 130 | 1033 131 | true 132 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png 133 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png 134 | 135 | 136 | vclwinx;DataSnapServer;fmx;emshosting;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;DBXMSSQLDriver;FireDACCommonODBC;emsclient;FireDACCommonDriver;FrameStandPackage_11_1;appanalytics;IndyProtocols;vclx;RadiantShapesFmx_Design;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;emsedge;bindcompfmx;DBXFirebirdDriver;inetdb;FireDACSqliteDriver;DbxClientDriver;FireDACASADriver;Tee;soapmidas;SVGIconImageListFMX;vclactnband;fmxFireDAC;dbexpress;FireDACInfxDriver;CEF4DelphiVCLRTL;DBXMySQLDriver;VclSmp;inet;DataSnapCommon;FMXAudioHGM;vcltouch;fmxase;DBXOdbcDriver;DzHTMLText_FMX;dbrtl;FireDACDBXDriver;FireDACOracleDriver;ComPortDrv;fmxdae;Skia.Package.FMX;FireDACMSAccDriver;CustomIPTransport;FireDACMSSQLDriver;SVGIconPackage;AbbreviaVCLD;DataSnapIndy10ServerTransport;CEF4DelphiFMXRTL;DataSnapConnectors;vclshlctrls;vcldsnap;DBXInterBaseDriver;FireDACMongoDBDriver;FMXPAN100;IndySystem;PngComponentsD;RadiantShapesFmx;FireDACTDataDriver;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;VLCPlayer;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;DataSnapClient;DataSnapProviderClient;adortl;DBXSybaseASEDriver;DBXDb2Driver;vclimg;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;FireDACDSDriver;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;DBXSybaseASADriver;DBXOracleDriver;FireDACDb2Driver;DBXInformixDriver;fmxobj;bindcompvclsmp;DataSnapNativeClient;DatasnapConnectorsFreePascal;soaprtl;SVGIconImageList;soapserver;FireDACIBDriver;$(DCC_UsePackage) 137 | true 138 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png 139 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png 140 | 141 | 142 | DEBUG;$(DCC_Define) 143 | true 144 | false 145 | true 146 | true 147 | true 148 | true 149 | true 150 | 151 | 152 | false 153 | 154 | 155 | false 156 | RELEASE;$(DCC_Define) 157 | 0 158 | 0 159 | 160 | 161 | 162 | MainSource 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | Base 173 | 174 | 175 | Cfg_1 176 | Base 177 | 178 | 179 | Cfg_2 180 | Base 181 | 182 | 183 | 184 | Delphi.Personality.12 185 | Application 186 | 187 | 188 | 189 | SQLG.dpr 190 | 191 | 192 | 193 | 194 | 195 | true 196 | 197 | 198 | 199 | 200 | true 201 | 202 | 203 | 204 | 205 | true 206 | 207 | 208 | 209 | 210 | SQLG.exe 211 | true 212 | 213 | 214 | 215 | 216 | 1 217 | 218 | 219 | Contents\MacOS 220 | 1 221 | 222 | 223 | 0 224 | 225 | 226 | 227 | 228 | classes 229 | 64 230 | 231 | 232 | classes 233 | 64 234 | 235 | 236 | 237 | 238 | res\xml 239 | 1 240 | 241 | 242 | res\xml 243 | 1 244 | 245 | 246 | 247 | 248 | library\lib\armeabi-v7a 249 | 1 250 | 251 | 252 | 253 | 254 | library\lib\armeabi 255 | 1 256 | 257 | 258 | library\lib\armeabi 259 | 1 260 | 261 | 262 | 263 | 264 | library\lib\armeabi-v7a 265 | 1 266 | 267 | 268 | 269 | 270 | library\lib\mips 271 | 1 272 | 273 | 274 | library\lib\mips 275 | 1 276 | 277 | 278 | 279 | 280 | library\lib\armeabi-v7a 281 | 1 282 | 283 | 284 | library\lib\arm64-v8a 285 | 1 286 | 287 | 288 | 289 | 290 | library\lib\armeabi-v7a 291 | 1 292 | 293 | 294 | 295 | 296 | res\drawable 297 | 1 298 | 299 | 300 | res\drawable 301 | 1 302 | 303 | 304 | 305 | 306 | res\values 307 | 1 308 | 309 | 310 | res\values 311 | 1 312 | 313 | 314 | 315 | 316 | res\values-v21 317 | 1 318 | 319 | 320 | res\values-v21 321 | 1 322 | 323 | 324 | 325 | 326 | res\values 327 | 1 328 | 329 | 330 | res\values 331 | 1 332 | 333 | 334 | 335 | 336 | res\drawable 337 | 1 338 | 339 | 340 | res\drawable 341 | 1 342 | 343 | 344 | 345 | 346 | res\drawable-xxhdpi 347 | 1 348 | 349 | 350 | res\drawable-xxhdpi 351 | 1 352 | 353 | 354 | 355 | 356 | res\drawable-xxxhdpi 357 | 1 358 | 359 | 360 | res\drawable-xxxhdpi 361 | 1 362 | 363 | 364 | 365 | 366 | res\drawable-ldpi 367 | 1 368 | 369 | 370 | res\drawable-ldpi 371 | 1 372 | 373 | 374 | 375 | 376 | res\drawable-mdpi 377 | 1 378 | 379 | 380 | res\drawable-mdpi 381 | 1 382 | 383 | 384 | 385 | 386 | res\drawable-hdpi 387 | 1 388 | 389 | 390 | res\drawable-hdpi 391 | 1 392 | 393 | 394 | 395 | 396 | res\drawable-xhdpi 397 | 1 398 | 399 | 400 | res\drawable-xhdpi 401 | 1 402 | 403 | 404 | 405 | 406 | res\drawable-mdpi 407 | 1 408 | 409 | 410 | res\drawable-mdpi 411 | 1 412 | 413 | 414 | 415 | 416 | res\drawable-hdpi 417 | 1 418 | 419 | 420 | res\drawable-hdpi 421 | 1 422 | 423 | 424 | 425 | 426 | res\drawable-xhdpi 427 | 1 428 | 429 | 430 | res\drawable-xhdpi 431 | 1 432 | 433 | 434 | 435 | 436 | res\drawable-xxhdpi 437 | 1 438 | 439 | 440 | res\drawable-xxhdpi 441 | 1 442 | 443 | 444 | 445 | 446 | res\drawable-xxxhdpi 447 | 1 448 | 449 | 450 | res\drawable-xxxhdpi 451 | 1 452 | 453 | 454 | 455 | 456 | res\drawable-small 457 | 1 458 | 459 | 460 | res\drawable-small 461 | 1 462 | 463 | 464 | 465 | 466 | res\drawable-normal 467 | 1 468 | 469 | 470 | res\drawable-normal 471 | 1 472 | 473 | 474 | 475 | 476 | res\drawable-large 477 | 1 478 | 479 | 480 | res\drawable-large 481 | 1 482 | 483 | 484 | 485 | 486 | res\drawable-xlarge 487 | 1 488 | 489 | 490 | res\drawable-xlarge 491 | 1 492 | 493 | 494 | 495 | 496 | res\values 497 | 1 498 | 499 | 500 | res\values 501 | 1 502 | 503 | 504 | 505 | 506 | 1 507 | 508 | 509 | Contents\MacOS 510 | 1 511 | 512 | 513 | 0 514 | 515 | 516 | 517 | 518 | Contents\MacOS 519 | 1 520 | .framework 521 | 522 | 523 | Contents\MacOS 524 | 1 525 | .framework 526 | 527 | 528 | Contents\MacOS 529 | 1 530 | .framework 531 | 532 | 533 | 0 534 | 535 | 536 | 537 | 538 | 1 539 | .dylib 540 | 541 | 542 | 1 543 | .dylib 544 | 545 | 546 | 1 547 | .dylib 548 | 549 | 550 | Contents\MacOS 551 | 1 552 | .dylib 553 | 554 | 555 | Contents\MacOS 556 | 1 557 | .dylib 558 | 559 | 560 | Contents\MacOS 561 | 1 562 | .dylib 563 | 564 | 565 | 0 566 | .dll;.bpl 567 | 568 | 569 | 570 | 571 | 1 572 | .dylib 573 | 574 | 575 | 1 576 | .dylib 577 | 578 | 579 | 1 580 | .dylib 581 | 582 | 583 | Contents\MacOS 584 | 1 585 | .dylib 586 | 587 | 588 | Contents\MacOS 589 | 1 590 | .dylib 591 | 592 | 593 | Contents\MacOS 594 | 1 595 | .dylib 596 | 597 | 598 | 0 599 | .bpl 600 | 601 | 602 | 603 | 604 | 0 605 | 606 | 607 | 0 608 | 609 | 610 | 0 611 | 612 | 613 | 0 614 | 615 | 616 | 0 617 | 618 | 619 | Contents\Resources\StartUp\ 620 | 0 621 | 622 | 623 | Contents\Resources\StartUp\ 624 | 0 625 | 626 | 627 | Contents\Resources\StartUp\ 628 | 0 629 | 630 | 631 | 0 632 | 633 | 634 | 635 | 636 | 1 637 | 638 | 639 | 1 640 | 641 | 642 | 643 | 644 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 645 | 1 646 | 647 | 648 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 649 | 1 650 | 651 | 652 | 653 | 654 | ..\ 655 | 1 656 | 657 | 658 | ..\ 659 | 1 660 | 661 | 662 | ..\ 663 | 1 664 | 665 | 666 | 667 | 668 | Contents 669 | 1 670 | 671 | 672 | Contents 673 | 1 674 | 675 | 676 | Contents 677 | 1 678 | 679 | 680 | 681 | 682 | Contents\Resources 683 | 1 684 | 685 | 686 | Contents\Resources 687 | 1 688 | 689 | 690 | Contents\Resources 691 | 1 692 | 693 | 694 | 695 | 696 | library\lib\armeabi-v7a 697 | 1 698 | 699 | 700 | library\lib\arm64-v8a 701 | 1 702 | 703 | 704 | 1 705 | 706 | 707 | 1 708 | 709 | 710 | 1 711 | 712 | 713 | 1 714 | 715 | 716 | Contents\MacOS 717 | 1 718 | 719 | 720 | Contents\MacOS 721 | 1 722 | 723 | 724 | Contents\MacOS 725 | 1 726 | 727 | 728 | 0 729 | 730 | 731 | 732 | 733 | library\lib\armeabi-v7a 734 | 1 735 | 736 | 737 | 738 | 739 | 1 740 | 741 | 742 | 1 743 | 744 | 745 | 746 | 747 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 748 | 1 749 | 750 | 751 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 752 | 1 753 | 754 | 755 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 756 | 1 757 | 758 | 759 | 760 | 761 | ..\ 762 | 1 763 | 764 | 765 | ..\ 766 | 1 767 | 768 | 769 | ..\ 770 | 1 771 | 772 | 773 | 774 | 775 | 1 776 | 777 | 778 | 1 779 | 780 | 781 | 1 782 | 783 | 784 | 785 | 786 | ..\$(PROJECTNAME).launchscreen 787 | 64 788 | 789 | 790 | ..\$(PROJECTNAME).launchscreen 791 | 64 792 | 793 | 794 | 795 | 796 | 1 797 | 798 | 799 | 1 800 | 801 | 802 | 1 803 | 804 | 805 | 806 | 807 | Assets 808 | 1 809 | 810 | 811 | Assets 812 | 1 813 | 814 | 815 | 816 | 817 | Assets 818 | 1 819 | 820 | 821 | Assets 822 | 1 823 | 824 | 825 | 826 | 827 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 828 | 1 829 | 830 | 831 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 832 | 1 833 | 834 | 835 | 836 | 837 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 838 | 1 839 | 840 | 841 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 842 | 1 843 | 844 | 845 | 846 | 847 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 848 | 1 849 | 850 | 851 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 852 | 1 853 | 854 | 855 | 856 | 857 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 858 | 1 859 | 860 | 861 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 862 | 1 863 | 864 | 865 | 866 | 867 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 868 | 1 869 | 870 | 871 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 872 | 1 873 | 874 | 875 | 876 | 877 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 878 | 1 879 | 880 | 881 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 882 | 1 883 | 884 | 885 | 886 | 887 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 888 | 1 889 | 890 | 891 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 892 | 1 893 | 894 | 895 | 896 | 897 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 898 | 1 899 | 900 | 901 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 902 | 1 903 | 904 | 905 | 906 | 907 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 908 | 1 909 | 910 | 911 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 912 | 1 913 | 914 | 915 | 916 | 917 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 918 | 1 919 | 920 | 921 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 922 | 1 923 | 924 | 925 | 926 | 927 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 928 | 1 929 | 930 | 931 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 932 | 1 933 | 934 | 935 | 936 | 937 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 938 | 1 939 | 940 | 941 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 942 | 1 943 | 944 | 945 | 946 | 947 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 948 | 1 949 | 950 | 951 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 952 | 1 953 | 954 | 955 | 956 | 957 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 958 | 1 959 | 960 | 961 | ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 962 | 1 963 | 964 | 965 | 966 | 967 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 968 | 1 969 | 970 | 971 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 972 | 1 973 | 974 | 975 | 976 | 977 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 978 | 1 979 | 980 | 981 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 982 | 1 983 | 984 | 985 | 986 | 987 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 988 | 1 989 | 990 | 991 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 992 | 1 993 | 994 | 995 | 996 | 997 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 998 | 1 999 | 1000 | 1001 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1002 | 1 1003 | 1004 | 1005 | 1006 | 1007 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1008 | 1 1009 | 1010 | 1011 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1012 | 1 1013 | 1014 | 1015 | 1016 | 1017 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1018 | 1 1019 | 1020 | 1021 | ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1022 | 1 1023 | 1024 | 1025 | 1026 | 1027 | 1028 | 1029 | 1030 | 1031 | 1032 | 1033 | 1034 | 1035 | 1036 | 1037 | 1038 | False 1039 | False 1040 | False 1041 | False 1042 | False 1043 | True 1044 | False 1045 | 1046 | 1047 | 12 1048 | 1049 | 1050 | 1051 | 1052 | 1053 | -------------------------------------------------------------------------------- /SQLG.dproj.local: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 1899.12.30 00:00:00.000.753,=D:\Projects\SQLGenerator\Unit1.pas 5 | 1899.12.30 00:00:00.000.713,D:\Projects\SQLGenerator\Unit1.pas=D:\Projects\SQLGenerator\SQLG.CreateTable.pas 6 | 1899.12.30 00:00:00.000.283,=D:\Projects\SQLGenerator\Unit1.pas 7 | 1899.12.30 00:00:00.000.823,=D:\Projects\SQLGenerator\Unit1.pas 8 | 1899.12.30 00:00:00.000.716,=D:\Projects\#Default\Unit5.pas 9 | 1899.12.30 00:00:00.000.931,D:\Projects\SQLGenerator\SQLG.Entity.pas=D:\Projects\SQLGenerator\SQLG.Table.pas 10 | 1899.12.30 00:00:00.000.195,D:\Projects\#Default\Project41.dproj=D:\Projects\SQLGenerator\SQLG.dproj 11 | 1899.12.30 00:00:00.000.626,D:\Projects\SQLGenerator\Unit1.pas=D:\Projects\SQLGenerator\SQLG.Types.pas 12 | 1899.12.30 00:00:00.000.365,=D:\Projects\SQLGenerator\Unit1.pas 13 | 1899.12.30 00:00:00.000.878,D:\Projects\SQLGenerator\Unit1.pas=D:\Projects\SQLGenerator\SQLG.Field.pas 14 | 1899.12.30 00:00:00.000.148,D:\Projects\SQLGenerator\Unit1.pas=D:\Projects\SQLGenerator\SQLG.Select.pas 15 | 1899.12.30 00:00:00.000.559,D:\Projects\SQLGenerator\Unit1.pas=D:\Projects\SQLGenerator\SQLG.Condition.pas 16 | 1899.12.30 00:00:00.000.744,D:\Projects\SQLGenerator\Unit1.pas=D:\Projects\SQLGenerator\SQLG.Params.pas 17 | 1899.12.30 00:00:00.000.559,=D:\Projects\SQLGenerator\Unit1.pas 18 | 1899.12.30 00:00:00.000.961,=D:\Projects\SQLGenerator\Unit1.pas 19 | 1899.12.30 00:00:00.000.013,=D:\Projects\SQLGenerator\Unit1.pas 20 | 1899.12.30 00:00:00.000.163,D:\Projects\SQLGenerator\Unit1.pas=D:\Projects\SQLGenerator\SQLG.Entity.pas 21 | 22 | 23 | -------------------------------------------------------------------------------- /SQLG.dsk: -------------------------------------------------------------------------------- 1 | [Closed Files] 2 | File_0=TSourceModule,'c:\program files (x86)\embarcadero\studio\22.0\source\rtl\win\Winapi.D2D1.pas',0,1,428,1,444,0,0,, 3 | File_1=TSourceModule,'c:\program files (x86)\embarcadero\studio\22.0\source\rtl\win\Winapi.DxgiFormat.pas',0,1,185,1,201,0,0,, 4 | File_2=TSourceModule,'D:\Downloads\Telegram Desktop\TextureTest\TexMain.pas',0,1,43,8,35,0,0,, 5 | File_3=TSourceModule,'c:\program files (x86)\embarcadero\studio\16.0\source\rtl\win\Winapi.D2D1.pas',0,1,1,6,21,0,0,, 6 | 7 | [Modules] 8 | Module0=D:\Projects\SQLGenerator\SQLG.dproj 9 | Module1=D:\Projects\SQLGenerator\SQLG.Field.pas 10 | Module2=c:\program files (x86)\embarcadero\studio\22.0\source\rtl\common\System.TypInfo.pas 11 | Module3=c:\program files (x86)\embarcadero\studio\22.0\SOURCE\RTL\SYS\System.pas 12 | Module4=c:\program files (x86)\embarcadero\studio\22.0\SOURCE\RTL\SYS\System.Types.pas 13 | Module5=c:\program files (x86)\embarcadero\studio\22.0\source\rtl\common\System.Rtti.pas 14 | Module6=D:\Projects\SQLGenerator\SQLG.Condition.pas 15 | Module7=D:\Projects\SQLGenerator\SQLG.Table.pas 16 | Module8=D:\Projects\SQLGenerator\SQLG.Types.pas 17 | Module9=D:\Projects\SQLGenerator\SQLG.Params.pas 18 | Module10=D:\Projects\SQLGenerator\SQLG.CreateTable.pas 19 | Module11=D:\Projects\SQLGenerator\SQLG.Select.pas 20 | Count=12 21 | EditWindowCount=1 22 | 23 | [D:\Projects\SQLGenerator\SQLG.dproj] 24 | ModuleType=TBaseProject 25 | 26 | [D:\Projects\SQLGenerator\SQLG.Field.pas] 27 | ModuleType=TSourceModule 28 | 29 | [c:\program files (x86)\embarcadero\studio\22.0\source\rtl\common\System.TypInfo.pas] 30 | ModuleType=TSourceModule 31 | 32 | [c:\program files (x86)\embarcadero\studio\22.0\SOURCE\RTL\SYS\System.pas] 33 | ModuleType=TSourceModule 34 | 35 | [c:\program files (x86)\embarcadero\studio\22.0\SOURCE\RTL\SYS\System.Types.pas] 36 | ModuleType=TSourceModule 37 | 38 | [c:\program files (x86)\embarcadero\studio\22.0\source\rtl\common\System.Rtti.pas] 39 | ModuleType=TSourceModule 40 | 41 | [D:\Projects\SQLGenerator\SQLG.Condition.pas] 42 | ModuleType=TSourceModule 43 | 44 | [D:\Projects\SQLGenerator\SQLG.Table.pas] 45 | ModuleType=TSourceModule 46 | 47 | [D:\Projects\SQLGenerator\SQLG.Types.pas] 48 | ModuleType=TSourceModule 49 | 50 | [D:\Projects\SQLGenerator\SQLG.Params.pas] 51 | ModuleType=TSourceModule 52 | 53 | [D:\Projects\SQLGenerator\SQLG.CreateTable.pas] 54 | ModuleType=TSourceModule 55 | 56 | [D:\Projects\SQLGenerator\SQLG.Select.pas] 57 | ModuleType=TSourceModule 58 | 59 | [EditWindow0] 60 | ViewCount=12 61 | CurrentEditView=D:\Projects\SQLGenerator\SQLG.dpr 62 | View0=0 63 | View1=1 64 | View2=2 65 | View3=3 66 | View4=4 67 | View5=5 68 | View6=6 69 | View7=7 70 | View8=8 71 | View9=9 72 | View10=10 73 | View11=11 74 | PercentageSizes=1 75 | Create=1 76 | Visible=1 77 | Docked=1 78 | State=0 79 | Left=0 80 | Top=0 81 | Width=9917 82 | Height=8973 83 | MaxLeft=-1 84 | MaxTop=-1 85 | ClientWidth=9917 86 | ClientHeight=8973 87 | DockedToMainForm=1 88 | BorlandEditorCodeExplorer=BorlandEditorCodeExplorer@EditWindow0 89 | TopPanelSize=0 90 | LeftPanelSize=1896 91 | LeftPanelClients=PropertyInspector,DockSite3 92 | LeftPanelData=00000800010100000000380F00000000000001680700000000000001000000005C0E000009000000446F636B536974653301000000000E1B00001100000050726F7065727479496E73706563746F72FFFFFFFF 93 | RightPanelSize=2000 94 | RightPanelClients=DockSite2,DockSite4 95 | RightPanelData=00000800010100000000380F00000000000001D00700000000000001000000004412000009000000446F636B536974653201000000000E1B000009000000446F636B5369746534FFFFFFFF 96 | BottomPanelSize=1574 97 | BottomPanelClients=MessageView,DockSite1 98 | BottomPanelData=0000080001020100000009000000446F636B5369746531DE440000000000000226060000000000000100000000DE4400000F0000004D65737361676556696577466F726DFFFFFFFF 99 | BottomMiddlePanelSize=0 100 | BottomMiddlePanelClients=DockSite0,GraphDrawingModel 101 | BottomMiddelPanelData=0000080001020200000009000000446F636B536974653010000000477261706844726177696E67566965779F1D00000000000002F206000000000000FFFFFFFF 102 | 103 | [View0] 104 | CustomEditViewType=TEditView 105 | Module=D:\Projects\SQLGenerator\SQLG.dpr 106 | CursorX=54 107 | CursorY=65 108 | TopLine=43 109 | LeftCol=1 110 | Elisions= 111 | Bookmarks= 112 | EditViewName=D:\Projects\SQLGenerator\SQLG.dpr 113 | 114 | [View1] 115 | CustomEditViewType=TEditView 116 | Module=D:\Projects\SQLGenerator\SQLG.CreateTable.pas 117 | CursorX=32 118 | CursorY=32 119 | TopLine=1 120 | LeftCol=1 121 | Elisions= 122 | Bookmarks= 123 | EditViewName=D:\Projects\SQLGenerator\SQLG.CreateTable.pas 124 | 125 | [View2] 126 | CustomEditViewType=TEditView 127 | Module=D:\Projects\SQLGenerator\SQLG.Table.pas 128 | CursorX=68 129 | CursorY=32 130 | TopLine=22 131 | LeftCol=1 132 | Elisions= 133 | Bookmarks= 134 | EditViewName=D:\Projects\SQLGenerator\SQLG.Table.pas 135 | 136 | [View3] 137 | CustomEditViewType=TEditView 138 | Module=D:\Projects\SQLGenerator\SQLG.Types.pas 139 | CursorX=63 140 | CursorY=37 141 | TopLine=10 142 | LeftCol=1 143 | Elisions= 144 | Bookmarks= 145 | EditViewName=D:\Projects\SQLGenerator\SQLG.Types.pas 146 | 147 | [View4] 148 | CustomEditViewType=TEditView 149 | Module=D:\Projects\SQLGenerator\SQLG.Select.pas 150 | CursorX=1 151 | CursorY=66 152 | TopLine=46 153 | LeftCol=1 154 | Elisions= 155 | Bookmarks= 156 | EditViewName=D:\Projects\SQLGenerator\SQLG.Select.pas 157 | 158 | [View5] 159 | CustomEditViewType=TEditView 160 | Module=D:\Projects\SQLGenerator\SQLG.Field.pas 161 | CursorX=1 162 | CursorY=89 163 | TopLine=75 164 | LeftCol=1 165 | Elisions= 166 | Bookmarks= 167 | EditViewName=D:\Projects\SQLGenerator\SQLG.Field.pas 168 | 169 | [View6] 170 | CustomEditViewType=TEditView 171 | Module=c:\program files (x86)\embarcadero\studio\22.0\SOURCE\RTL\SYS\System.pas 172 | CursorX=1 173 | CursorY=12 174 | TopLine=1 175 | LeftCol=1 176 | Elisions= 177 | Bookmarks= 178 | EditViewName=c:\program files (x86)\embarcadero\studio\22.0\SOURCE\RTL\SYS\System.pas 179 | 180 | [View7] 181 | CustomEditViewType=TEditView 182 | Module=c:\program files (x86)\embarcadero\studio\22.0\source\rtl\common\System.TypInfo.pas 183 | CursorX=32 184 | CursorY=328 185 | TopLine=317 186 | LeftCol=1 187 | Elisions= 188 | Bookmarks= 189 | EditViewName=c:\program files (x86)\embarcadero\studio\22.0\source\rtl\common\System.TypInfo.pas 190 | 191 | [View8] 192 | CustomEditViewType=TEditView 193 | Module=c:\program files (x86)\embarcadero\studio\22.0\SOURCE\RTL\SYS\System.Types.pas 194 | CursorX=1 195 | CursorY=10 196 | TopLine=1318 197 | LeftCol=1 198 | Elisions= 199 | Bookmarks= 200 | EditViewName=c:\program files (x86)\embarcadero\studio\22.0\SOURCE\RTL\SYS\System.Types.pas 201 | 202 | [View9] 203 | CustomEditViewType=TEditView 204 | Module=D:\Projects\SQLGenerator\SQLG.Condition.pas 205 | CursorX=20 206 | CursorY=41 207 | TopLine=28 208 | LeftCol=1 209 | Elisions= 210 | Bookmarks= 211 | EditViewName=D:\Projects\SQLGenerator\SQLG.Condition.pas 212 | 213 | [View10] 214 | CustomEditViewType=TEditView 215 | Module=c:\program files (x86)\embarcadero\studio\22.0\source\rtl\common\System.Rtti.pas 216 | CursorX=1 217 | CursorY=414 218 | TopLine=473 219 | LeftCol=1 220 | Elisions= 221 | Bookmarks= 222 | EditViewName=c:\program files (x86)\embarcadero\studio\22.0\source\rtl\common\System.Rtti.pas 223 | 224 | [View11] 225 | CustomEditViewType=TEditView 226 | Module=D:\Projects\SQLGenerator\SQLG.Params.pas 227 | CursorX=10 228 | CursorY=24 229 | TopLine=9 230 | LeftCol=1 231 | Elisions= 232 | Bookmarks= 233 | EditViewName=D:\Projects\SQLGenerator\SQLG.Params.pas 234 | 235 | [Watches] 236 | Count=0 237 | 238 | [WatchWindow] 239 | WatchColumnWidth=120 240 | WatchShowColumnHeaders=1 241 | PercentageSizes=1 242 | Create=1 243 | Visible=1 244 | Docked=1 245 | State=0 246 | Left=0 247 | Top=0 248 | Width=3823 249 | Height=1143 250 | MaxLeft=-1 251 | MaxTop=-1 252 | ClientWidth=3823 253 | ClientHeight=1143 254 | TBDockHeight=213 255 | LRDockWidth=13604 256 | Dockable=1 257 | StayOnTop=0 258 | 259 | [Breakpoints] 260 | Count=0 261 | 262 | [EmbarcaderoWin32Debugger_AddressBreakpoints] 263 | Count=0 264 | 265 | [EmbarcaderoWin64Debugger_AddressBreakpoints] 266 | Count=0 267 | 268 | [EmbarcaderoLinux64Debugger_AddressBreakpoints] 269 | Count=0 270 | 271 | [EmbarcaderoIOS64DeviceDebugger_AddressBreakpoints] 272 | Count=0 273 | 274 | [EmbarcaderoAndroid32Debugger_AddressBreakpoints] 275 | Count=0 276 | 277 | [EmbarcaderoAndroid64Debugger_AddressBreakpoints] 278 | Count=0 279 | 280 | [EmbarcaderoOSXArm64Debugger_AddressBreakpoints] 281 | Count=0 282 | 283 | [EmbarcaderoOSX64Debugger_AddressBreakpoints] 284 | Count=0 285 | 286 | [Main Window] 287 | PercentageSizes=1 288 | Create=1 289 | Visible=1 290 | Docked=0 291 | State=2 292 | Left=146 293 | Top=271 294 | Width=8932 295 | Height=8527 296 | MaxLeft=-5 297 | MaxTop=-10 298 | MaxWidth=8932 299 | MaxHeight=8527 300 | ClientWidth=10000 301 | ClientHeight=10078 302 | BottomPanelSize=8574 303 | BottomPanelClients=EditWindow0 304 | BottomPanelData=0000080000000000000000000000000000000000000000000000000100000000000000000C0000004564697457696E646F775F30FFFFFFFF 305 | 306 | [ProjectManager] 307 | PercentageSizes=1 308 | Create=1 309 | Visible=1 310 | Docked=1 311 | State=0 312 | Left=0 313 | Top=0 314 | Width=2000 315 | Height=4273 316 | MaxLeft=-1 317 | MaxTop=-1 318 | ClientWidth=2000 319 | ClientHeight=4273 320 | TBDockHeight=5901 321 | LRDockWidth=2349 322 | Dockable=1 323 | StayOnTop=0 324 | 325 | [MessageView] 326 | PercentageSizes=1 327 | Create=1 328 | Visible=1 329 | Docked=1 330 | State=0 331 | Left=0 332 | Top=28 333 | Width=9917 334 | Height=1376 335 | MaxLeft=-1 336 | MaxTop=-1 337 | ClientWidth=9917 338 | ClientHeight=1376 339 | TBDockHeight=1376 340 | LRDockWidth=2771 341 | Dockable=1 342 | StayOnTop=0 343 | 344 | [ToolForm] 345 | PercentageSizes=1 346 | Create=1 347 | Visible=1 348 | Docked=1 349 | State=0 350 | Left=0 351 | Top=0 352 | Width=2000 353 | Height=2083 354 | MaxLeft=-1 355 | MaxTop=-1 356 | ClientWidth=2000 357 | ClientHeight=2083 358 | TBDockHeight=7151 359 | LRDockWidth=2000 360 | Dockable=1 361 | StayOnTop=0 362 | 363 | [PropertyInspector] 364 | PercentageSizes=1 365 | Create=1 366 | Visible=1 367 | Docked=1 368 | State=0 369 | Left=0 370 | Top=425 371 | Width=1896 372 | Height=3130 373 | MaxLeft=-1 374 | MaxTop=-1 375 | ClientWidth=1896 376 | ClientHeight=3130 377 | TBDockHeight=8702 378 | LRDockWidth=1896 379 | Dockable=1 380 | StayOnTop=0 381 | SplitPos=111 382 | 383 | [frmDesignPreview] 384 | PercentageSizes=1 385 | Create=1 386 | Visible=1 387 | Docked=1 388 | State=0 389 | Left=0 390 | Top=0 391 | Width=2000 392 | Height=8430 393 | MaxLeft=-1 394 | MaxTop=-1 395 | ClientWidth=2000 396 | ClientHeight=8430 397 | TBDockHeight=5959 398 | LRDockWidth=2510 399 | Dockable=1 400 | StayOnTop=0 401 | 402 | [TemplateView] 403 | PercentageSizes=1 404 | Create=1 405 | Visible=0 406 | Docked=1 407 | State=0 408 | Left=0 409 | Top=0 410 | Width=276 411 | Height=359 412 | MaxLeft=-1 413 | MaxTop=-1 414 | ClientWidth=276 415 | ClientHeight=359 416 | TBDockHeight=359 417 | LRDockWidth=276 418 | Dockable=1 419 | StayOnTop=0 420 | Name=120 421 | Description=334 422 | filter=1 423 | 424 | [DebugLogView] 425 | PercentageSizes=1 426 | Create=1 427 | Visible=1 428 | Docked=1 429 | State=0 430 | Left=0 431 | Top=0 432 | Width=3823 433 | Height=1143 434 | MaxLeft=-1 435 | MaxTop=-1 436 | ClientWidth=3823 437 | ClientHeight=1143 438 | TBDockHeight=407 439 | LRDockWidth=4953 440 | Dockable=1 441 | StayOnTop=0 442 | 443 | [ThreadStatusWindow] 444 | PercentageSizes=1 445 | Create=1 446 | Visible=1 447 | Docked=1 448 | State=0 449 | Left=0 450 | Top=0 451 | Width=3823 452 | Height=1143 453 | MaxLeft=-1 454 | MaxTop=-1 455 | ClientWidth=3823 456 | ClientHeight=1143 457 | TBDockHeight=213 458 | LRDockWidth=7406 459 | Dockable=1 460 | StayOnTop=0 461 | Column0Width=145 462 | Column1Width=100 463 | Column2Width=115 464 | Column3Width=374 465 | 466 | [LocalVarsWindow] 467 | PercentageSizes=1 468 | Create=1 469 | Visible=1 470 | Docked=1 471 | State=0 472 | Left=0 473 | Top=0 474 | Width=3823 475 | Height=1143 476 | MaxLeft=-1 477 | MaxTop=-1 478 | ClientWidth=3823 479 | ClientHeight=1143 480 | TBDockHeight=1541 481 | LRDockWidth=3484 482 | Dockable=1 483 | StayOnTop=0 484 | 485 | [CallStackWindow] 486 | PercentageSizes=1 487 | Create=1 488 | Visible=1 489 | Docked=1 490 | State=0 491 | Left=0 492 | Top=0 493 | Width=3823 494 | Height=1143 495 | MaxLeft=-1 496 | MaxTop=-1 497 | ClientWidth=3823 498 | ClientHeight=1143 499 | TBDockHeight=2064 500 | LRDockWidth=3484 501 | Dockable=1 502 | StayOnTop=0 503 | 504 | [FindReferencsForm] 505 | PercentageSizes=1 506 | Create=1 507 | Visible=1 508 | Docked=1 509 | State=0 510 | Left=0 511 | Top=0 512 | Width=2339 513 | Height=1202 514 | MaxLeft=-1 515 | MaxTop=-1 516 | ClientWidth=2339 517 | ClientHeight=1202 518 | TBDockHeight=2316 519 | LRDockWidth=2823 520 | Dockable=1 521 | StayOnTop=0 522 | 523 | [RefactoringForm] 524 | PercentageSizes=1 525 | Create=1 526 | Visible=1 527 | Docked=1 528 | State=0 529 | Left=0 530 | Top=0 531 | Width=2339 532 | Height=1202 533 | MaxLeft=-1 534 | MaxTop=-1 535 | ClientWidth=2339 536 | ClientHeight=1202 537 | TBDockHeight=3207 538 | LRDockWidth=2823 539 | Dockable=1 540 | StayOnTop=0 541 | 542 | [ToDo List] 543 | PercentageSizes=1 544 | Create=1 545 | Visible=1 546 | Docked=1 547 | State=0 548 | Left=0 549 | Top=0 550 | Width=2339 551 | Height=1202 552 | MaxLeft=-1 553 | MaxTop=-1 554 | ClientWidth=2339 555 | ClientHeight=1202 556 | TBDockHeight=1153 557 | LRDockWidth=3677 558 | Dockable=1 559 | StayOnTop=0 560 | Column0Width=314 561 | Column1Width=30 562 | Column2Width=150 563 | Column3Width=172 564 | Column4Width=129 565 | SortOrder=4 566 | ShowHints=1 567 | ShowChecked=1 568 | 569 | [DataExplorerContainer] 570 | PercentageSizes=1 571 | Create=1 572 | Visible=1 573 | Docked=1 574 | State=0 575 | Left=0 576 | Top=0 577 | Width=2000 578 | Height=8430 579 | MaxLeft=-1 580 | MaxTop=-1 581 | ClientWidth=2000 582 | ClientHeight=8430 583 | TBDockHeight=4884 584 | LRDockWidth=7151 585 | Dockable=1 586 | StayOnTop=0 587 | 588 | [GraphDrawingModel] 589 | PercentageSizes=1 590 | Create=1 591 | Visible=0 592 | Docked=1 593 | State=0 594 | Left=0 595 | Top=0 596 | Width=2854 597 | Height=3207 598 | MaxLeft=-1 599 | MaxTop=-1 600 | ClientWidth=2854 601 | ClientHeight=3207 602 | TBDockHeight=3207 603 | LRDockWidth=2854 604 | Dockable=1 605 | StayOnTop=0 606 | 607 | [ClassBrowserTool] 608 | PercentageSizes=1 609 | Create=1 610 | Visible=0 611 | Docked=1 612 | State=0 613 | Left=-8 614 | Top=-8 615 | Width=1849 616 | Height=3140 617 | MaxLeft=-1 618 | MaxTop=-1 619 | ClientWidth=1849 620 | ClientHeight=3140 621 | TBDockHeight=3140 622 | LRDockWidth=1849 623 | Dockable=1 624 | StayOnTop=0 625 | 626 | [MetricsView] 627 | PercentageSizes=1 628 | Create=1 629 | Visible=1 630 | Docked=1 631 | State=0 632 | Left=0 633 | Top=0 634 | Width=2339 635 | Height=1202 636 | MaxLeft=-1 637 | MaxTop=-1 638 | ClientWidth=2339 639 | ClientHeight=1202 640 | TBDockHeight=4835 641 | LRDockWidth=3562 642 | Dockable=1 643 | StayOnTop=0 644 | 645 | [QAView] 646 | PercentageSizes=1 647 | Create=1 648 | Visible=1 649 | Docked=1 650 | State=0 651 | Left=0 652 | Top=0 653 | Width=2339 654 | Height=1202 655 | MaxLeft=-1 656 | MaxTop=-1 657 | ClientWidth=2339 658 | ClientHeight=1202 659 | TBDockHeight=4835 660 | LRDockWidth=3562 661 | Dockable=1 662 | StayOnTop=0 663 | 664 | [BreakpointWindow] 665 | PercentageSizes=1 666 | Create=1 667 | Visible=1 668 | Docked=1 669 | State=0 670 | Left=0 671 | Top=0 672 | Width=3823 673 | Height=1143 674 | MaxLeft=-1 675 | MaxTop=-1 676 | ClientWidth=3823 677 | ClientHeight=1143 678 | TBDockHeight=1550 679 | LRDockWidth=8740 680 | Dockable=1 681 | StayOnTop=0 682 | Column0Width=200 683 | Column1Width=75 684 | Column2Width=200 685 | Column3Width=200 686 | Column4Width=200 687 | Column5Width=75 688 | Column6Width=75 689 | 690 | [StructureView] 691 | PercentageSizes=1 692 | Create=1 693 | Visible=1 694 | Docked=1 695 | State=0 696 | Left=0 697 | Top=0 698 | Width=1896 699 | Height=3498 700 | MaxLeft=-1 701 | MaxTop=-1 702 | ClientWidth=1896 703 | ClientHeight=3498 704 | TBDockHeight=3682 705 | LRDockWidth=1896 706 | Dockable=1 707 | StayOnTop=0 708 | 709 | [ParnassusBookmarksForm] 710 | PercentageSizes=1 711 | Create=1 712 | Visible=0 713 | Docked=0 714 | State=0 715 | Left=0 716 | Top=0 717 | Width=2969 718 | Height=3188 719 | MaxLeft=-5 720 | MaxTop=-10 721 | ClientWidth=2885 722 | ClientHeight=2810 723 | TBDockHeight=3188 724 | LRDockWidth=2969 725 | Dockable=1 726 | StayOnTop=0 727 | 728 | [ModelViewTool] 729 | PercentageSizes=1 730 | Create=1 731 | Visible=1 732 | Docked=1 733 | State=0 734 | Left=0 735 | Top=0 736 | Width=2000 737 | Height=8430 738 | MaxLeft=-1 739 | MaxTop=-1 740 | ClientWidth=2000 741 | ClientHeight=8430 742 | TBDockHeight=4884 743 | LRDockWidth=5307 744 | Dockable=1 745 | StayOnTop=0 746 | 747 | [BorlandEditorCodeExplorer@EditWindow0] 748 | PercentageSizes=1 749 | Create=1 750 | Visible=0 751 | Docked=0 752 | State=0 753 | Left=0 754 | Top=0 755 | Width=1823 756 | Height=6172 757 | MaxLeft=-5 758 | MaxTop=-10 759 | ClientWidth=1740 760 | ClientHeight=5795 761 | TBDockHeight=6172 762 | LRDockWidth=1823 763 | Dockable=1 764 | StayOnTop=0 765 | 766 | [DockHosts] 767 | DockHostCount=5 768 | 769 | [DockSite0] 770 | HostDockSite=DockBottomCenterPanel 771 | DockSiteType=1 772 | PercentageSizes=1 773 | Create=1 774 | Visible=0 775 | Docked=1 776 | State=0 777 | Left=8 778 | Top=8 779 | Width=2339 780 | Height=1473 781 | MaxLeft=-1 782 | MaxTop=-1 783 | ClientWidth=2339 784 | ClientHeight=1473 785 | TBDockHeight=1473 786 | LRDockWidth=2339 787 | Dockable=1 788 | StayOnTop=0 789 | TabPosition=1 790 | ActiveTabID=RefactoringForm 791 | TabDockClients=RefactoringForm,FindReferencsForm,ToDo List,MetricsView,QAView 792 | 793 | [DockSite1] 794 | HostDockSite=DockBottomPanel 795 | DockSiteType=1 796 | PercentageSizes=1 797 | Create=1 798 | Visible=0 799 | Docked=1 800 | State=0 801 | Left=8 802 | Top=8 803 | Width=3823 804 | Height=1415 805 | MaxLeft=-1 806 | MaxTop=-1 807 | ClientWidth=3823 808 | ClientHeight=1415 809 | TBDockHeight=1415 810 | LRDockWidth=3823 811 | Dockable=1 812 | StayOnTop=0 813 | TabPosition=1 814 | ActiveTabID=DebugLogView 815 | TabDockClients=DebugLogView,BreakpointWindow,ThreadStatusWindow,CallStackWindow,WatchWindow,LocalVarsWindow 816 | 817 | [DockSite2] 818 | HostDockSite=DockRightPanel 819 | DockSiteType=1 820 | PercentageSizes=1 821 | Create=1 822 | Visible=1 823 | Docked=1 824 | State=0 825 | Left=0 826 | Top=28 827 | Width=2000 828 | Height=4545 829 | MaxLeft=-1 830 | MaxTop=-1 831 | ClientWidth=2000 832 | ClientHeight=4545 833 | TBDockHeight=8702 834 | LRDockWidth=2000 835 | Dockable=1 836 | StayOnTop=0 837 | TabPosition=1 838 | ActiveTabID=ProjectManager 839 | TabDockClients=ProjectManager,ModelViewTool,DataExplorerContainer,frmDesignPreview 840 | 841 | [DockSite3] 842 | HostDockSite=DockLeftPanel 843 | DockSiteType=1 844 | PercentageSizes=1 845 | Create=1 846 | Visible=1 847 | Docked=1 848 | State=0 849 | Left=0 850 | Top=28 851 | Width=1896 852 | Height=3498 853 | MaxLeft=-1 854 | MaxTop=-1 855 | ClientWidth=1896 856 | ClientHeight=3498 857 | TBDockHeight=8702 858 | LRDockWidth=1896 859 | Dockable=1 860 | StayOnTop=0 861 | TabPosition=1 862 | ActiveTabID=StructureView 863 | TabDockClients=StructureView,ClassBrowserTool 864 | 865 | [DockSite4] 866 | HostDockSite=DockRightPanel 867 | DockSiteType=1 868 | PercentageSizes=1 869 | Create=1 870 | Visible=1 871 | Docked=1 872 | State=0 873 | Left=0 874 | Top=533 875 | Width=2000 876 | Height=2083 877 | MaxLeft=-1 878 | MaxTop=-1 879 | ClientWidth=2000 880 | ClientHeight=2083 881 | TBDockHeight=8702 882 | LRDockWidth=2000 883 | Dockable=1 884 | StayOnTop=0 885 | TabPosition=1 886 | ActiveTabID=ToolForm 887 | TabDockClients=ToolForm,TemplateView 888 | 889 | -------------------------------------------------------------------------------- /SQLG.identcache: -------------------------------------------------------------------------------- 1 | +D:\Projects\SQLGenerator\SQLG.Condition.pas'D:\Projects\SQLGenerator\SQLG.Types.pas-D:\Projects\SQLGenerator\SQLG.CreateTable.pas'D:\Projects\SQLGenerator\SQLG.Field.pas!D:\Projects\SQLGenerator\SQLG.dpr(D:\Projects\SQLGenerator\SQLG.Params.pas'D:\Projects\SQLGenerator\SQLG.Table.pas(D:\Projects\SQLGenerator\SQLG.Select.pas -------------------------------------------------------------------------------- /SQLG.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HemulGM/SQLGenerator/e6ff13fda858a8c659cd8ca40aa9c2c9b9b60f51/SQLG.res --------------------------------------------------------------------------------