Project

General

Profile

ds-sync.p

Igor Skornyakov, 01/28/2023 03:50 AM

Download (5.5 KB)

 
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.