1
|
define temp-table ttEmployee
|
2
|
field cEmployee as character
|
3
|
field cManager as character
|
4
|
field cManager1 as character initial 'm'
|
5
|
field cAddr as character initial 'a'
|
6
|
index idxEmployee as unique cEmployee.
|
7
|
|
8
|
define temp-table ttBenefits
|
9
|
field cEmployee as character
|
10
|
field cBenefits as character
|
11
|
index idxEmp cEmployee.
|
12
|
|
13
|
define temp-table ttAddr
|
14
|
field iAddr as int
|
15
|
field cAddr as character
|
16
|
field lHide as logical
|
17
|
index idxAddr as unique iAddr.
|
18
|
|
19
|
define temp-table srcEmployee
|
20
|
field cEmployee as character
|
21
|
field cManager as character
|
22
|
field iManager as int
|
23
|
field iAddr as integer
|
24
|
field lHide as logical.
|
25
|
|
26
|
define temp-table srcManager
|
27
|
field iManager as int
|
28
|
field cManager1 as character
|
29
|
field lHide as logical.
|
30
|
|
31
|
define temp-table srcBenefits like ttBenefits.
|
32
|
|
33
|
create ttAddr.
|
34
|
assign
|
35
|
ttAddr.iAddr = 1
|
36
|
ttAddr.cAddr = 'Home'
|
37
|
ttAddr.lHide = false.
|
38
|
|
39
|
create ttAddr.
|
40
|
assign
|
41
|
ttAddr.iAddr = 2
|
42
|
ttAddr.cAddr = 'Outerspace'
|
43
|
ttAddr.lHide = false.
|
44
|
|
45
|
create srcManager.
|
46
|
assign
|
47
|
srcManager.cManager = 'Mustaine2'
|
48
|
srcManager.iManager = 1
|
49
|
srcManager.lHide = false.
|
50
|
|
51
|
create srcManager.
|
52
|
assign
|
53
|
srcManager.cManager = 'Mustaine3'
|
54
|
srcManager.iManager = 2
|
55
|
srcManager.lHide = false.
|
56
|
|
57
|
create srcEmployee.
|
58
|
assign
|
59
|
srcEmployee.cEmployee = 'Dave'
|
60
|
srcEmployee.cManager = 'Mustaine1'
|
61
|
srcEmployee.iManager = 2
|
62
|
srcEmployee.iAddr = 1.
|
63
|
|
64
|
create srcEmployee.
|
65
|
assign
|
66
|
srcEmployee.cEmployee = 'Mustaine1'
|
67
|
srcEmployee.iManager = 1
|
68
|
srcEmployee.iAddr = 2
|
69
|
srcEmployee.lHide = false.
|
70
|
|
71
|
create srcEmployee.
|
72
|
assign
|
73
|
srcEmployee.cEmployee = 'Toto'
|
74
|
srcEmployee.cManager = 'Mustaine'
|
75
|
srcEmployee.iManager = 1
|
76
|
srcEmployee.iAddr = 1
|
77
|
srcEmployee.lHide = false.
|
78
|
|
79
|
create srcBenefits.
|
80
|
assign
|
81
|
srcBenefits.cEmployee = 'Dave'
|
82
|
srcBenefits.cBenefits = 'Voice training'.
|
83
|
|
84
|
create srcBenefits.
|
85
|
assign
|
86
|
srcBenefits.cEmployee = 'Dave'
|
87
|
srcBenefits.cBenefits = 'Groupies'.
|
88
|
|
89
|
create srcBenefits.
|
90
|
assign
|
91
|
srcBenefits.cEmployee = 'Mustain'
|
92
|
srcBenefits.cBenefits = 'Free beer'.
|
93
|
|
94
|
create srcBenefits.
|
95
|
assign
|
96
|
srcBenefits.cEmployee = 'Mustain1'
|
97
|
srcBenefits.cBenefits = 'Free beer1'.
|
98
|
|
99
|
create srcBenefits.
|
100
|
assign
|
101
|
srcBenefits.cEmployee = 'Mustain2'
|
102
|
srcBenefits.cBenefits = 'Free beer2'.
|
103
|
|
104
|
define dataset myRecurs for ttEmployee, ttBenefits
|
105
|
data-relation r1 for ttEmployee, ttEmployee
|
106
|
relation-fields (cManager, cEmployee) recursive
|
107
|
data-relation r2 for ttEmployee, ttBenefits
|
108
|
relation-fields(cEmployee, cEmployee).
|
109
|
|
110
|
define query qEmp for srcEmployee, srcManager, ttAddr.
|
111
|
define query qBen for srcBenefits.
|
112
|
|
113
|
define data-source dsEmployee for query qEmp srcEmployee, srcManager, ttAddr.
|
114
|
define data-source dsBen for query qBen srcBenefits.
|
115
|
|
116
|
buffer ttEmployee:attach-data-source(data-source dsEmployee:HANDLE).
|
117
|
buffer ttBenefits:attach-data-source(data-source dsBen:HANDLE).
|
118
|
|
119
|
query qEmp:query-prepare("for each srcEmployee where cEmployee = 'Dave' and srcEmployee.lHide = false, " +
|
120
|
"each srcManager where srcManager.lHide = false and srcManager.iManager = srcEmployee.iManager, " +
|
121
|
"each ttAddr where ttAddr.lHide = false and ttAddr.iAddr = srcEmployee.iAddr").
|
122
|
//query qEmp:query-prepare("for each srcEmployee where cManager = 'Mustain'").
|
123
|
|
124
|
query qBen:query-prepare("for each srcBenefits").
|
125
|
|
126
|
OUTPUT TO recursive_relation_fill_tmp.txt.
|
127
|
dataset myRecurs:fill().
|
128
|
|
129
|
//dataset myRecurs:fill().
|
130
|
|
131
|
for each ttEmployee:
|
132
|
message ttEmployee.cEmployee ttEmployee.cManager ttEmployee.cManager1 ttEmployee.cAddr.
|
133
|
for each ttBenefits where ttBenefits.cEmployee = ttEmployee.cEmployee:
|
134
|
message ttEmployee.cEmployee '->' ttBenefits.cBenefits.
|
135
|
end.
|
136
|
end.
|
137
|
OUTPUT CLOSE.
|