Project

General

Profile

hql-issue.p

updated/improved testcases - Ovidiu Maxiniuc, 04/21/2015 02:02 PM

Download (4.78 KB)

 
1
DEFINE TEMP-TABLE tt1
2
    FIELD f1 AS INT
3
    FIELD f2 AS DATE.
4

    
5
DEFINE TEMP-TABLE tt2
6
    FIELD f1 AS INT
7
    FIELD f2 AS DATE.
8

    
9
/* create initial [tt2.f1 = ?0 and tt2.f2 is null] */
10
CREATE tt1. ASSIGN tt1.f1 = -1 tt1.f2 = ?.
11
CREATE tt2. ASSIGN tt2.f1 = -1 tt2.f2 = 01/01/01.
12

    
13
/* reset to       [tt2.f1 = ?0 and tt2.f2 = ?1]    */
14
CREATE tt1. ASSIGN tt1.f1 = 2 tt1.f2 = TODAY.
15
CREATE tt2. ASSIGN tt2.f1 = 2 tt2.f2 = TODAY.
16

    
17
/* reset back to  [tt2.f1 = ?0 and tt2.f2 is null] */
18
CREATE tt1. ASSIGN tt1.f1 = 3 tt1.f2 = ?.
19
CREATE tt2. ASSIGN tt2.f1 = 3 tt2.f2 = ?.
20

    
21
/* hql kept! */
22
CREATE tt1. ASSIGN tt1.f1 = 0 tt1.f2 = ?.
23
CREATE tt2. ASSIGN tt2.f1 = 0 tt2.f2 = TODAY.
24

    
25
/* reset to       [tt2.f1 is null and tt2.f2 = ?0] */
26
CREATE tt1. ASSIGN tt1.f1 = ? tt1.f2 = 10/10/10.
27
CREATE tt2. ASSIGN tt2.f1 = ? tt2.f2 = TODAY.
28

    
29
/* load from cache [tt2.f1 = ?0 and tt2.f2 = ?1]   */
30
CREATE tt1. ASSIGN tt1.f1 = 5 tt1.f2 = 12/12/12.
31
CREATE tt2. ASSIGN tt2.f1 = 5 tt2.f2 = 12/12/12.
32

    
33
/* hql kept! */
34
CREATE tt1. ASSIGN tt1.f1 = 7 tt1.f2 = 11/11/11.
35
CREATE tt2. ASSIGN tt2.f1 = 7 tt2.f2 = 11/11/11.
36

    
37

    
38
/* common for multiple functions */
39
DEFINE QUERY qq FOR tt1, tt2.
40
DEFINE VAR cnt AS INTEGER.
41

    
42
FUNCTION f-dynamic RETURN INTEGER () :
43
   DISPLAY "Dynamic" SKIP WITH NO-LABEL FRAME fr-dynamic.
44
   DEFINE VARIABLE qh AS HANDLE NO-UNDO.
45
   CREATE QUERY qh.
46
   qh:SET-BUFFERS(BUFFER tt1:HANDLE, BUFFER tt2:HANDLE).
47
   qh:QUERY-PREPARE("FOR EACH tt1, EACH tt2 WHERE tt2.f1 EQ tt1.f1 AND tt2.f2 EQ tt1.f2").
48
   qh:QUERY-OPEN.
49
   qh:GET-NEXT(NO-LOCK).
50
   cnt = 1.
51

    
52
   DO WHILE NOT qh:QUERY-OFF-END:
53
      DISPLAY tt1 WITH FRAME fr-dynamic.
54
      DISPLAY tt2 WITH FRAME fr-dynamic.
55
      cnt = cnt * tt1.f1.
56
      qh:GET-NEXT().
57
   END.
58
   
59
   qh:QUERY-CLOSE().
60
   DELETE OBJECT qh.
61
   RETURN cnt.
62
END FUNCTION.
63

    
64

    
65
FUNCTION f-static RETURN INTEGER () :
66
   DISPLAY "Static" SKIP WITH NO-LABEL FRAME fr-static.
67
   cnt = 1.
68

    
69
   FOR EACH tt1, EACH tt2 WHERE tt2.f1 EQ tt1.f1 AND tt2.f2 EQ tt1.f2:
70
      DISPLAY tt1 WITH FRAME fr-static.
71
      DISPLAY tt2 WITH FRAME fr-static.
72
      cnt = cnt * tt1.f1.
73
   END.
74
   
75
   RETURN cnt.
76
END FUNCTION.
77

    
78

    
79
FUNCTION f-static-query RETURN INTEGER () :
80
   DISPLAY "Static Query" SKIP WITH NO-LABEL FRAME fr-static-query.
81
   OPEN QUERY qq FOR EACH tt1, EACH tt2 WHERE tt2.f1 EQ tt1.f1 AND tt2.f2 EQ tt1.f2.
82
   GET FIRST qq. 
83
   cnt = 1.
84
   
85
   DO WHILE AVAILABLE tt1:
86
      DISPLAY tt1 WITH FRAME fr-static-query.
87
      DISPLAY tt2 WITH FRAME fr-static-query.
88
      cnt = cnt * tt1.f1.
89
      GET NEXT qq.
90
   END.
91

    
92
   RETURN cnt.
93
END FUNCTION.
94

    
95

    
96
FUNCTION f-static-preselect RETURN INTEGER () :
97
   DISPLAY "Static Preselect" SKIP WITH NO-LABEL FRAME fr-static-preselect.
98
   OPEN QUERY qq PRESELECT EACH tt1, EACH tt2 WHERE tt2.f1 EQ tt1.f1 AND tt2.f2 EQ tt1.f2.
99
   GET FIRST qq. 
100
   cnt = 1.
101
   
102
   DO WHILE AVAILABLE tt1:
103
      DISPLAY tt1 WITH FRAME fr-static-preselect.
104
      DISPLAY tt2 WITH FRAME fr-static-preselect.
105
      cnt = cnt * tt1.f1.
106
      GET NEXT qq.
107
   END.
108

    
109
   RETURN cnt.
110
END FUNCTION.
111

    
112
DISPLAY  "Expected: 2 * 3 * 5 * 7 = 210" SKIP
113
         f-dynamic() f-static() f-static-query() f-static-preselect().
114

    
115
/* actual P4GL output:
116
┌───────────────────────────────────────┐
117
│Dynamic                                │
118
│         7 11/11/11          7 11/11/11│
119
└───────────────────────────────────────┘
120
┌───────────────────────────────────────┐
121
│Static                                 │
122
│         7 11/11/11          7 11/11/11│
123
└───────────────────────────────────────┘
124
┌───────────────────────────────────────┐
125
│Static Query                           │
126
│         7 11/11/11          7 11/11/11│
127
└───────────────────────────────────────┘
128
┌───────────────────────────────────────┐
129
│Static Preselect                       │
130
│         7 11/11/11          7 11/11/11│
131
└───────────────────────────────────────┘
132
┌───────────────────────────────────────────┐
133
│Expected: 2 * 3 * 5 * 7 = 210              │
134
│       210        210        210        210│
135
└───────────────────────────────────────────┘
136
*/