1
1
"""
2
2
main.pony
3
-
4
-
5
3
"""
4
+
6
5
use " pg"
7
6
use " pg/codec"
8
7
use " pg/introspect"
@@ -34,34 +33,38 @@ class User
34
33
35
34
36
35
class BlogEntryRecordNotify is FetchNotify
37
- var entries: ( Array [BlogEntry val ] trn | Array [ BlogEntry val ] val ) = recover trn Array [BlogEntry val ] end
36
+ var entries: Array [BlogEntry val ] trn = recover trn Array [BlogEntry val ] end
38
37
let view: BlogEntriesView tag
39
38
let logger: Logger [String val ] val
39
+
40
40
new iso create (v: BlogEntriesView tag , out: OutStream ) =>
41
41
view = v
42
42
logger = StringLogger (Warn , out)
43
43
44
- fun ref descirption (desc: RowDescription ) => None
45
- fun size (): USize => 10
44
+ fun ref descirption (desc: RowDescription ) =>
45
+ logger.log (" Got description" )
46
+
47
+ fun size (): USize => 1000
48
+
46
49
fun ref batch (b: Array [Record val ] val , next: FetchNotifyNext val ) =>
47
- logger (Fine ) and logger.log (" Fetch entries" )
48
- if b.size () == size () then
49
- try
50
- for r in b.values () do
51
- let e = recover val BlogEntry (
52
- r (0 ) as I32 ,
53
- 2 , 3
54
- /*r(1) as I32,*/
55
- /*r(2) as I32*/
56
- ) end
57
- Debug .out (e.string ())
58
- (entries as Array [BlogEntry val ] trn ).push (e)
59
- end
50
+ logger.log (" Fetch entries" )
51
+ try
52
+ for r in b.values () do
53
+ // logger.log((r(0) as I32).string())
54
+ let e = recover val BlogEntry (
55
+ r (0 ) as I32 ,
56
+ 2 , 3
57
+ //r(1) as I32,
58
+ //r(2) as I32
59
+ ) end
60
+ // logger.log(e.string())
61
+ entries.push (e)
60
62
end
61
- next (None )
62
63
end
64
+ next (None )
65
+
63
66
fun ref record (r: Record val ) =>
64
- Debug . out (" ." )
67
+ logger. log (" ." )
65
68
try
66
69
let e = recover val BlogEntry (
67
70
r (0 ) as I32 ,
@@ -74,19 +77,20 @@ class BlogEntryRecordNotify is FetchNotify
74
77
75
78
end
76
79
fun ref stop () =>
77
- try
78
- entries = recover val entries as Array [BlogEntry val ] trn end
79
- view.entries (entries)
80
- end
80
+ logger.log (" stop" )
81
+ let entries' = entries = recover trn Array [BlogEntry val ] end
82
+ view.entries (consume val entries')
81
83
82
84
83
85
class UserRecordNotify is FetchNotify
84
86
let entries: Array [BlogEntry ] = Array [BlogEntry ]
85
87
let view: BlogEntriesView tag
86
88
let logger: Logger [String val ] val
89
+
87
90
new create (v: BlogEntriesView tag , out: OutStream ) =>
88
91
view = v
89
92
logger = StringLogger (Fine , out)
93
+
90
94
fun ref descirption (desc: RowDescription ) => None
91
95
92
96
fun ref batch (b: Array [Record val ] val , next: FetchNotifyNext val ) =>
@@ -103,6 +107,7 @@ class UserRecordNotify is FetchNotify
103
107
try
104
108
view.user (recover User (r (" id" ) as I32 ) end )
105
109
end
110
+
106
111
fun ref stop () => None
107
112
108
113
@@ -122,24 +127,27 @@ actor BlogEntriesView
122
127
Debug (" fetch_entries" )
123
128
(_conn as Connection ).fetch (
124
129
/*"SELECT 1 as user_id, 2, 3 UNION ALL SELECT 4 as user_id, 5, 6 UNION ALL SELECT 7 as user_id, 8, 9",*/
125
- " SELECT generate_series(0,100 )" ,
130
+ " SELECT generate_series(0,10000 )" ,
126
131
recover BlogEntryRecordNotify (this , out) end )
127
132
end
128
133
129
134
be fetch_user () =>
135
+ logger.log (" fetch_user" )
130
136
try
131
137
(_conn as Connection ).fetch (
132
138
" SELECT 1 as id" ,
133
139
recover UserRecordNotify (this , out) end )
134
140
end
135
141
136
142
be user (u: User iso ) =>
143
+ logger.log (" got user #" + u.id .string ())
137
144
_user = recover val consume u end
138
145
Debug .out (" ###" )
139
146
fetch_entries ()
140
147
141
148
be render (entries': Array [BlogEntry val ] val ) =>
142
149
Debug .out (" render" )
150
+ logger.log (" render" )
143
151
try logger.log (entries'.size ().string () + " " + entries'(0 ).string ()) end
144
152
/*logger.log(entries'.size().string())*/
145
153
try (_conn as Connection ).release () end
@@ -151,62 +159,62 @@ actor BlogEntriesView
151
159
be apply (conn: Connection tag ) =>
152
160
_conn = conn
153
161
fetch_user ()
154
- _entries.next [BlogEntriesView ](recover this ~render () end )
162
+ _entries.next [None ](recover this ~render () end )
155
163
156
164
157
165
actor Main
158
166
let session: Session
159
167
let _env: Env
168
+ let logger: Logger [String val ] val
160
169
161
170
new create (env: Env ) =>
162
171
_env = env
163
- let logger = StringLogger (Fine , env.out )
164
- session = Session (env where user=" macflytest" ,
165
- password=EnvPasswordProvider (env),
166
- database=" macflytest" )
172
+ logger = StringLogger (Fine , env.out )
173
+ session = Session (env where password=EnvPasswordProvider (env))
167
174
let that = recover tag this end
168
- """
169
175
session.execute (" SELECT generate_series(0,1)" ,
170
176
recover val
171
- lambda (r: Rows val)(that) =>
177
+ { (r: Rows val )(that) =>
172
178
that.raw_count (r)
173
179
None
174
- end
180
+ }
175
181
end )
176
182
177
183
session.execute (" SELECT 42, 24 as foo;;" ,
178
184
recover val
179
- lambda (r: Rows val)(that) =>
180
- that.raw_handler(r)
181
- end
185
+ { (r: Rows val )(that) =>
186
+ that.raw_handler (r)
187
+ }
182
188
end )
183
189
184
190
185
191
session.execute (" SELECT $1, $2 as foo" ,
186
192
recover val
187
- lambda (r: Rows val)(that) =>
193
+ { (r: Rows val )(that) =>
188
194
that.execute_handler (r)
189
- end
195
+ }
190
196
end ,
191
- recover val [as PGValue: I32(70000), I32(-100000)] end)
192
- """
197
+ recover val [as PGValue : I32 (70000 ); I32 (-100000 )] end )
198
+
199
+
193
200
let p = session.connect (recover val
194
- lambda (c: Connection tag )(env) =>
201
+ { (c: Connection tag )(env) =>
195
202
BlogEntriesView (env.out )(c)
196
- end
203
+ }
197
204
end )
198
205
206
+
199
207
be raw_count (rows: Rows val ) =>
200
- _env. out . print ( rows.size ().string ())
208
+ logger. log ( " rows: " + rows.size ().string ())
201
209
202
210
be raw_handler (rows: Rows val ) =>
203
211
for row in rows.values () do
204
- try Debug . out ( row (0 ) as I32 ) end
205
- try Debug . out ( row (" foo" ) as I32 ) end
212
+ try logger. log (( row (0 ) as I32 ). string () ) end
213
+ try logger. log (( row (" foo" ) as I32 ). string () ) end
206
214
end
207
215
208
216
be execute_handler (rows: Rows val ) =>
209
217
for row in rows.values () do
210
- try Debug . out ( row (0 ) as I32 ) end
211
- try Debug . out ( row (" foo" ) as I32 ) end
218
+ try logger. log (( row (0 ) as I32 ). string () ) end
219
+ try logger. log (( row (" foo" ) as I32 ). string () ) end
212
220
end
0 commit comments