1
- import gleam/dynamic
1
+ import gleam/dynamic/decode
2
2
import gleam/list
3
3
import gleam/option
4
4
import gleeunit
@@ -54,18 +54,23 @@ pub fn with_connection_test() {
54
54
pub fn query_1_test ( ) {
55
55
use conn <- connect ( )
56
56
let assert Ok ( [ # ( 1 , 2 , 3 ) , # ( 4 , 5 , 6 ) ] ) =
57
- sqlight . query (
58
- "select 1, 2, 3 union all select 4, 5, 6" ,
59
- conn ,
60
- [ ] ,
61
- dynamic . tuple3 ( dynamic . int , dynamic . int , dynamic . int ) ,
62
- )
57
+ sqlight . query ( "select 1, 2, 3 union all select 4, 5, 6" , conn , [ ] , {
58
+ use one <- decode . field ( 0 , decode . int )
59
+ use two <- decode . field ( 1 , decode . int )
60
+ use three <- decode . field ( 2 , decode . int )
61
+ decode . success ( # ( one , two , three ) )
62
+ } )
63
63
}
64
64
65
65
pub fn query_2_test ( ) {
66
66
use conn <- connect ( )
67
67
let assert Ok ( [ 1337 ] ) =
68
- sqlight . query ( "select 1337" , conn , [ ] , dynamic . element ( 0 , dynamic . int ) )
68
+ sqlight . query (
69
+ "select 1337" ,
70
+ conn ,
71
+ [ ] ,
72
+ decode . field ( 0 , decode . int , decode . success ) ,
73
+ )
69
74
}
70
75
71
76
pub fn bind_int_test ( ) {
@@ -75,7 +80,7 @@ pub fn bind_int_test() {
75
80
"select ?" ,
76
81
conn ,
77
82
[ sqlight . int ( 12_345 ) ] ,
78
- dynamic . element ( 0 , dynamic . int ) ,
83
+ decode . field ( 0 , decode . int , decode . success ) ,
79
84
)
80
85
}
81
86
@@ -86,7 +91,7 @@ pub fn bind_float_test() {
86
91
"select ?" ,
87
92
conn ,
88
93
[ sqlight . float ( 12_345.6789 ) ] ,
89
- dynamic . element ( 0 , dynamic . float ) ,
94
+ decode . field ( 0 , decode . float , decode . success ) ,
90
95
)
91
96
}
92
97
@@ -97,19 +102,18 @@ pub fn bind_text_test() {
97
102
"select ?" ,
98
103
conn ,
99
104
[ sqlight . text ( "hello" ) ] ,
100
- dynamic . element ( 0 , dynamic . string ) ,
105
+ decode . field ( 0 , decode . string , decode . success ) ,
101
106
)
102
107
}
103
108
104
109
pub fn bind_blob_test ( ) {
105
110
use conn <- connect ( )
106
111
let assert Ok ( [ # ( << 123 , 0 >> , "blob" ) ] ) =
107
- sqlight . query (
108
- "select ?1, typeof(?1)" ,
109
- conn ,
110
- [ sqlight . blob ( << 123 , 0 >> ) ] ,
111
- dynamic . tuple2 ( dynamic . bit_array , dynamic . string ) ,
112
- )
112
+ sqlight . query ( "select ?1, typeof(?1)" , conn , [ sqlight . blob ( << 123 , 0 >> ) ] , {
113
+ use ary <- decode . field ( 0 , decode . bit_array )
114
+ use str <- decode . field ( 1 , decode . string )
115
+ decode . success ( # ( ary , str ) )
116
+ } )
113
117
}
114
118
115
119
pub fn bind_null_test ( ) {
@@ -119,7 +123,7 @@ pub fn bind_null_test() {
119
123
"select ?" ,
120
124
conn ,
121
125
[ sqlight . null ( ) ] ,
122
- dynamic . element ( 0 , dynamic . optional ( dynamic . int ) ) ,
126
+ decode . field ( 0 , decode . optional ( decode . int ) , decode . success ) ,
123
127
)
124
128
}
125
129
@@ -130,7 +134,7 @@ pub fn bind_bool_test() {
130
134
"select ?" ,
131
135
conn ,
132
136
[ sqlight . bool ( True ) ] ,
133
- dynamic . element ( 0 , sqlight . decode_bool ) ,
137
+ decode . field ( 0 , sqlight . decode_bool ( ) , decode . success ) ,
134
138
)
135
139
}
136
140
@@ -144,7 +148,7 @@ pub fn exec_test() {
144
148
"select name from cats" ,
145
149
conn ,
146
150
[ ] ,
147
- dynamic . element ( 0 , dynamic . string ) ,
151
+ decode . field ( 0 , decode . string , decode . success ) ,
148
152
)
149
153
}
150
154
@@ -157,7 +161,11 @@ pub fn exec_fail_test() {
157
161
158
162
pub fn readme_example_test ( ) {
159
163
use conn <- sqlight . with_connection ( ":memory:" )
160
- let cat_decoder = dynamic . tuple2 ( dynamic . string , dynamic . int )
164
+ let cat_decoder = {
165
+ use name <- decode . field ( 0 , decode . string )
166
+ use age <- decode . field ( 1 , decode . int )
167
+ decode . success ( # ( name , age ) )
168
+ }
161
169
162
170
let sql =
163
171
"
@@ -242,7 +250,13 @@ pub fn decode_error_test() {
242
250
sqlight . GenericError ,
243
251
"Decoder failed, expected String, got Int in 0" ,
244
252
- 1,
245
- ) ) = sqlight . query ( "select 1" , conn , [ ] , dynamic . element ( 0 , dynamic . string ) )
253
+ ) ) =
254
+ sqlight . query (
255
+ "select 1" ,
256
+ conn ,
257
+ [ ] ,
258
+ decode . field ( 0 , decode . string , decode . success ) ,
259
+ )
246
260
}
247
261
248
262
pub fn query_error_test ( ) {
@@ -253,7 +267,7 @@ pub fn query_error_test() {
253
267
"this isn't a valid query" ,
254
268
conn ,
255
269
[ ] ,
256
- dynamic . element ( 0 , dynamic . int ) ,
270
+ decode . field ( 0 , decode . int , decode . success ) ,
257
271
)
258
272
}
259
273
@@ -265,14 +279,14 @@ pub fn bind_nullable_test() {
265
279
"select ?" ,
266
280
conn ,
267
281
[ sqlight . nullable ( sqlight . int , option . Some ( 12_345 ) ) ] ,
268
- dynamic . element ( 0 , dynamic . optional ( dynamic . int ) ) ,
282
+ decode . field ( 0 , decode . optional ( decode . int ) , decode . success ) ,
269
283
)
270
284
271
285
let assert Ok ( [ option . None ] ) =
272
286
sqlight . query (
273
287
"select ?" ,
274
288
conn ,
275
289
[ sqlight . nullable ( sqlight . int , option . None ) ] ,
276
- dynamic . element ( 0 , dynamic . optional ( dynamic . int ) ) ,
290
+ decode . field ( 0 , decode . optional ( decode . int ) , decode . success ) ,
277
291
)
278
292
}
0 commit comments