1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
| ///////////////////////////////////////////////////////////////////////////
// //
// Copyright (c) 2015 by Charta Software B.V. //
// All rights reserved //
// //
// Version: 1.7.0.83525 //
// Web site: https://pascal.chartasoftware.com/ //
// //
// This code and information are provided "as is" without warranty of //
// any kind. Dissemination of this information or reproduction of //
// this material is strictly forbidden unless prior written permission //
// is obtained from Charta Software B.V.. //
// //
///////////////////////////////////////////////////////////////////////////
unit Sql.Operator_.Assign;
interface
uses
Boolean,
Condition.Projecting,
Sql.Expression,
Sql.Operator_,
Sql.Table.Column,
Type_;
type
TSqlAssign = class(TSqlOperator)
private
FColumn: TSqlTableColumn;
FValue: TSqlExpression;
procedure SetColumn(const Value: TSqlTableColumn);
procedure SetValue(const Value: TSqlExpression);
public
constructor Create(Column: TSqlTableColumn; Value: TSqlExpression); reintroduce; virtual;
destructor Destroy(); override;
function CopyOperator(): TSqlOperator; override;
function GetType(): TType; override;
function CopyAssign(): TSqlAssign;
function ToRestriction(): TSqlExpression;
property Column: TSqlTableColumn read FColumn write SetColumn;
property Value: TSqlExpression read FValue write SetValue;
public
type
TWithColumn = class(TProjectingCondition<TSqlAssign, TSqlTableColumn>)
public
function Matches(const Assign: TSqlAssign): TBoolean; override;
end;
end;
implementation
uses
Sql.Operator_.Binary,
Sql.Table.Column.Reference,
Type_.None;
{ TSqlAssign }
function TSqlAssign.CopyAssign(): TSqlAssign;
begin
Result := TSqlAssign.Create(Column, Value.Copy());
end;
function TSqlAssign.CopyOperator(): TSqlOperator;
begin
Result := CopyAssign();
end;
constructor TSqlAssign.Create(Column: TSqlTableColumn; Value: TSqlExpression);
begin
inherited Create();
Self.Column := Column;
Self.Value := Value;
end;
destructor TSqlAssign.Destroy();
begin
Column.ReleaseReference();
Value.ReleaseReference();
inherited Destroy();
end;
function TSqlAssign.GetType(): TType;
begin
Result := TNoneType.Nothing;
end;
procedure TSqlAssign.SetColumn(const Value: TSqlTableColumn);
begin
if Value <> Column then
begin
Column.ReleaseReference();
FColumn := Value;
Column.AddReference();
end;
end;
procedure TSqlAssign.SetValue(const Value: TSqlExpression);
begin
if Value <> Self.Value then
begin
Self.Value.ReleaseReference();
FValue := Value;
Self.Value.AddReference();
end;
end;
function TSqlAssign.ToRestriction(): TSqlExpression;
begin
Result := TSqlEqual.Create(TSqlTableColumnReference.Create(Column), Value);
end;
{ TSqlAssign.TWithColumn }
function TSqlAssign.TWithColumn.Matches(const Assign: TSqlAssign): TBoolean;
begin
Result := Assign.Column = ComparisonValue;
end;
end.
|