1
|
DEFINE TEMP-TABLE tt1 NO-UNDO
|
2
|
FIELD id AS INTEGER
|
3
|
FIELD val AS CHARACTER
|
4
|
INDEX idx AS UNIQUE id
|
5
|
.
|
6
|
|
7
|
DEFINE TEMP-TABLE tt2 NO-UNDO
|
8
|
FIELD id AS INTEGER
|
9
|
FIELD ref AS CHARACTER
|
10
|
FIELD val AS CHARACTER
|
11
|
INDEX idx AS UNIQUE id
|
12
|
.
|
13
|
|
14
|
DEFINE TEMP-TABLE tt3 NO-UNDO
|
15
|
FIELD id AS INTEGER
|
16
|
FIELD ref AS CHARACTER
|
17
|
FIELD val AS CHARACTER
|
18
|
INDEX idx AS UNIQUE id
|
19
|
.
|
20
|
|
21
|
CREATE tt1. tt1.id = 1. tt1.val = 'a1'.
|
22
|
CREATE tt1. tt1.id = 2. tt1.val = 'a2'.
|
23
|
CREATE tt1. tt1.id = 3. tt1.val = 'a3'.
|
24
|
CREATE tt1. tt1.id = 4. tt1.val = 'a4'.
|
25
|
|
26
|
CREATE tt2. tt2.id = 10. tt2.ref = 'a1'. tt2.val = 'b10'.
|
27
|
CREATE tt2. tt2.id = 11. tt2.ref = 'a1'. tt2.val = 'b11'.
|
28
|
CREATE tt2. tt2.id = 12. tt2.ref = 'a1'. tt2.val = 'b12'.
|
29
|
CREATE tt2. tt2.id = 13. tt2.ref = 'a1'. tt2.val = 'b13'.
|
30
|
CREATE tt2. tt2.id = 20. tt2.ref = 'a2'. tt2.val = 'b20'.
|
31
|
CREATE tt2. tt2.id = 21. tt2.ref = 'a2'. tt2.val = 'b21'.
|
32
|
CREATE tt2. tt2.id = 22. tt2.ref = 'a2'. tt2.val = 'b22'.
|
33
|
CREATE tt2. tt2.id = 23. tt2.ref = 'a2'. tt2.val = 'b23'.
|
34
|
|
35
|
CREATE tt3. tt3.id = 100. tt3.ref = 'b10'. tt3.val = 'c100'.
|
36
|
CREATE tt3. tt3.id = 101. tt3.ref = 'b11'. tt3.val = 'c101'.
|
37
|
CREATE tt3. tt3.id = 102. tt3.ref = 'b12'. tt3.val = 'c102'.
|
38
|
CREATE tt3. tt3.id = 103. tt3.ref = 'b13'. tt3.val = 'c103'.
|
39
|
CREATE tt3. tt3.id = 200. tt3.ref = 'b20'. tt3.val = 'c200'.
|
40
|
CREATE tt3. tt3.id = 201. tt3.ref = 'b21'. tt3.val = 'c201'.
|
41
|
CREATE tt3. tt3.id = 202. tt3.ref = 'b22'. tt3.val = 'c202'.
|
42
|
CREATE tt3. tt3.id = 203. tt3.ref = 'b23'. tt3.val = 'c203'.
|
43
|
|
44
|
DEFINE DATASET ds FOR tt1, tt2, tt3
|
45
|
DATA-RELATION r12 FOR tt1, tt2 RELATION-FIELDS(val, ref) // REPOSITION
|
46
|
DATA-RELATION r23 FOR tt2, tt3 RELATION-FIELDS(val, ref). // REPOSITION.
|
47
|
|
48
|
DEF VAR hDS AS HANDLE NO-UNDO.
|
49
|
DEF VAR hQuery AS HANDLE NO-UNDO.
|
50
|
DEF VAR hQ AS HANDLE NO-UNDO.
|
51
|
DEF VAR hBuffer AS HANDLE NO-UNDO.
|
52
|
DEF VAR hB AS HANDLE NO-UNDO.
|
53
|
DEF VAR iBuffer AS INTEGER NO-UNDO.
|
54
|
DEF VAR nR AS INTEGER NO-UNDO.
|
55
|
DEF VAR lc AS LOGICAL NO-UNDO.
|
56
|
DEF VAR rid AS ROWID NO-UNDO.
|
57
|
DEF VAR crid AS CHAR NO-UNDO.
|
58
|
DEF VAR qstr AS CHAR NO-UNDO.
|
59
|
|
60
|
hDS = DATASET ds:HANDLE.
|
61
|
|
62
|
OUTPUT TO ds-sync.txt.
|
63
|
|
64
|
CREATE QUERY hQuery.
|
65
|
hBuffer = hDS:GET-BUFFER-HANDLE(1).
|
66
|
hQuery:ADD-BUFFER(hBuffer).
|
67
|
hQuery:QUERY-PREPARE("FOR EACH " + hBuffer:NAME).
|
68
|
|
69
|
|
70
|
hQuery:QUERY-OPEN().
|
71
|
hQuery:GET-FIRST().
|
72
|
nR = 0.
|
73
|
MESSAGE 'Start iterate'.
|
74
|
DO WHILE NOT hQuery:QUERY-OFF-END:
|
75
|
MESSAGE nR.
|
76
|
nR = nR + 1.
|
77
|
MESSAGE hDS:GET-BUFFER-HANDLE(1):BUFFER-FIELD('val'):BUFFER-VALUE()
|
78
|
hDS:GET-BUFFER-HANDLE(2):BUFFER-FIELD('val'):BUFFER-VALUE()
|
79
|
hDS:GET-BUFFER-HANDLE(3):BUFFER-FIELD('val'):BUFFER-VALUE()
|
80
|
.
|
81
|
IF hBuffer:ERROR THEN
|
82
|
MESSAGE hBuffer:ERROR-STRING.
|
83
|
hQuery:GET-NEXT().
|
84
|
END.
|
85
|
|
86
|
hQuery:QUERY-CLOSE().
|
87
|
|
88
|
hQuery:QUERY-OPEN().
|
89
|
hQuery:GET-FIRST().
|
90
|
nR = 0.
|
91
|
MESSAGE 'Start iterate' iBuffer.
|
92
|
DO WHILE NOT hQuery:QUERY-OFF-END:
|
93
|
hB = hDS:GET-BUFFER-HANDLE(2).
|
94
|
crid = STRING(hBuffer:ROWID).
|
95
|
// qstr = "FOR EACH " + hBuffer:NAME + " WHERE ROWID(" + hBuffer:NAME + ") = TO-ROWID('" + crid + "'), EACH " + hB:NAME + " WHERE " + hB:NAME + ".ref = " + hBuffer:NAME + ".val".
|
96
|
qstr = "FOR EACH " + hB:NAME + " WHERE " + hB:NAME + ".ref = " + hBuffer:NAME + ".val".
|
97
|
MESSAGE nR crid qstr.
|
98
|
nR = nR + 1.
|
99
|
CREATE QUERY hQ.
|
100
|
// hQ:ADD-BUFFER(hBuffer).
|
101
|
hQ:ADD-BUFFER(hB).
|
102
|
hQ:QUERY-PREPARE(qstr).
|
103
|
hQ:QUERY-OPEN().
|
104
|
hQ:GET-LAST().
|
105
|
|
106
|
MESSAGE '0' hDS:GET-BUFFER-HANDLE(1):BUFFER-FIELD('val'):BUFFER-VALUE()
|
107
|
hDS:GET-BUFFER-HANDLE(2):BUFFER-FIELD('val'):BUFFER-VALUE()
|
108
|
hDS:GET-BUFFER-HANDLE(3):BUFFER-FIELD('val'):BUFFER-VALUE()
|
109
|
.
|
110
|
hQ:QUERY-CLOSE().
|
111
|
DELETE OBJECT hQ.
|
112
|
|
113
|
lc = hDS:GET-BUFFER-HANDLE(1):SYNCHRONIZE().
|
114
|
MESSAGE '1' lc hDS:GET-BUFFER-HANDLE(1):BUFFER-FIELD('val'):BUFFER-VALUE()
|
115
|
hDS:GET-BUFFER-HANDLE(2):BUFFER-FIELD('val'):BUFFER-VALUE()
|
116
|
hDS:GET-BUFFER-HANDLE(3):BUFFER-FIELD('val'):BUFFER-VALUE()
|
117
|
.
|
118
|
lc = hDS:GET-BUFFER-HANDLE(1):SYNCHRONIZE().
|
119
|
MESSAGE '2' lc hDS:GET-BUFFER-HANDLE(1):BUFFER-FIELD('val'):BUFFER-VALUE()
|
120
|
hDS:GET-BUFFER-HANDLE(2):BUFFER-FIELD('val'):BUFFER-VALUE()
|
121
|
hDS:GET-BUFFER-HANDLE(3):BUFFER-FIELD('val'):BUFFER-VALUE()
|
122
|
.
|
123
|
IF hBuffer:ERROR THEN
|
124
|
MESSAGE hBuffer:ERROR-STRING.
|
125
|
hQuery:GET-NEXT().
|
126
|
END.
|
127
|
|
128
|
hQuery:QUERY-CLOSE().
|
129
|
MESSAGE 'End iterate'.
|
130
|
|
131
|
hQuery:QUERY-OPEN().
|
132
|
hQuery:GET-FIRST().
|
133
|
lc = hDS:GET-BUFFER-HANDLE(1):SYNCHRONIZE().
|
134
|
MESSAGE 'A' lc hDS:GET-BUFFER-HANDLE(1):BUFFER-FIELD('val'):BUFFER-VALUE()
|
135
|
hDS:GET-BUFFER-HANDLE(2):BUFFER-FIELD('val'):BUFFER-VALUE()
|
136
|
hDS:GET-BUFFER-HANDLE(3):BUFFER-FIELD('val'):BUFFER-VALUE()
|
137
|
.
|
138
|
hQuery:GET-LAST().
|
139
|
lc = hDS:GET-BUFFER-HANDLE(1):SYNCHRONIZE().
|
140
|
MESSAGE 'B' lc hDS:GET-BUFFER-HANDLE(1):BUFFER-FIELD('val'):BUFFER-VALUE()
|
141
|
hDS:GET-BUFFER-HANDLE(2):BUFFER-FIELD('val'):BUFFER-VALUE()
|
142
|
hDS:GET-BUFFER-HANDLE(3):BUFFER-FIELD('val'):BUFFER-VALUE()
|
143
|
.
|
144
|
hQuery:GET-NEXT().
|
145
|
lc = hDS:GET-BUFFER-HANDLE(1):SYNCHRONIZE().
|
146
|
MESSAGE 'C' lc hDS:GET-BUFFER-HANDLE(1):BUFFER-FIELD('val'):BUFFER-VALUE()
|
147
|
hDS:GET-BUFFER-HANDLE(2):BUFFER-FIELD('val'):BUFFER-VALUE()
|
148
|
hDS:GET-BUFFER-HANDLE(3):BUFFER-FIELD('val'):BUFFER-VALUE()
|
149
|
.
|
150
|
|
151
|
hQuery:QUERY-CLOSE().
|
152
|
|
153
|
DELETE OBJECT hQuery.
|
154
|
OUTPUT CLOSE.
|