@@ -160,3 +160,77 @@ func TestBytes(t *testing.T) {
160
160
_ , err = tx .Exec (`INSERT INTO TestBytes (s) VALUES (?)` , []byte ("foo" ))
161
161
assert .NoError (t , err )
162
162
}
163
+
164
+ func TestNullableEnumWithoutLeadZero (t * testing.T ) {
165
+ const (
166
+ ddl = `
167
+ CREATE TABLE test_nullable_enum_without_lead_zero (
168
+ value Nullable(Enum8('A' = 1, 'B' = 2)),
169
+ value2 Nullable(Enum16('A' = 1, 'B' = 2))
170
+ ) Engine=Memory
171
+ `
172
+ dml = "INSERT INTO test_nullable_enum_without_lead_zero (value, value2) VALUES (?, ?)"
173
+ query = "SELECT value, value2 FROM test_nullable_enum_without_lead_zero"
174
+ )
175
+ var data = [][]interface {}{
176
+ {"A" , nil },
177
+ {"A" , "B" },
178
+ {nil , "B" },
179
+ }
180
+ if connect , err := sql .Open ("clickhouse" , "tcp://127.0.0.1:9000?debug=true" ); assert .NoError (t , err ) && assert .NoError (t , connect .Ping ()) {
181
+ if _ , err := connect .Exec ("DROP TABLE IF EXISTS test_nullable_enum_without_lead_zero" ); assert .NoError (t , err ) {
182
+ if _ , err := connect .Exec (ddl ); assert .NoError (t , err ) {
183
+ if tx , err := connect .Begin (); assert .NoError (t , err ) {
184
+
185
+ if stmt , err := tx .Prepare (dml ); assert .NoError (t , err ) {
186
+ for _ , v := range data {
187
+ if _ , err = stmt .Exec (v ... ); ! assert .NoError (t , err ) {
188
+ return
189
+ }
190
+ }
191
+
192
+ }
193
+ if assert .NoError (t , tx .Commit ()) {
194
+ var item struct {
195
+ Value * string
196
+ Value2 * string
197
+ }
198
+ if rows , err := connect .Query (query ); assert .NoError (t , err ) {
199
+ var i int
200
+ for rows .Next () {
201
+ err := rows .Scan (
202
+ & item .Value ,
203
+ & item .Value2 ,
204
+ )
205
+ if ! assert .NoError (t , err ) {
206
+ return
207
+ }
208
+ switch v := item .Value ; true {
209
+ case v != nil :
210
+ if ! assert .Equal (t , data [i ][0 ], * v ) {
211
+ return
212
+ }
213
+ default :
214
+ if ! assert .Equal (t , (* string )(nil ), v ) {
215
+ return
216
+ }
217
+ }
218
+ switch v := item .Value2 ; true {
219
+ case v != nil :
220
+ if ! assert .Equal (t , data [i ][1 ], * v ) {
221
+ return
222
+ }
223
+ default :
224
+ if ! assert .Equal (t , (* string )(nil ), v ) {
225
+ return
226
+ }
227
+ }
228
+ i ++
229
+ }
230
+ }
231
+ }
232
+ }
233
+ }
234
+ }
235
+ }
236
+ }
0 commit comments