Skip to content
This repository was archived by the owner on Feb 26, 2024. It is now read-only.

Commit 56fc6c0

Browse files
committed
update ip test
1 parent 9850ae9 commit 56fc6c0

File tree

4 files changed

+70
-11
lines changed

4 files changed

+70
-11
lines changed

clickhouse_direct_test.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,9 @@ func Test_DirectArrayT(t *testing.T) {
158158
date Array(Date),
159159
datetime Array(DateTime),
160160
enum8 Array(Enum8 ('a' = 1, 'b' = 2)),
161-
enum16 Array(Enum16('c' = 1, 'd' = 2))
161+
enum16 Array(Enum16('c' = 1, 'd' = 2)),
162+
ipv4 Array(IPv4),
163+
ipv6 Array(IPv6)
162164
) Engine=Memory
163165
`
164166
dml = `
@@ -178,7 +180,9 @@ func Test_DirectArrayT(t *testing.T) {
178180
date,
179181
datetime,
180182
enum8,
181-
enum16
183+
enum16,
184+
ipv4,
185+
ipv6
182186
) VALUES (
183187
?,
184188
?,
@@ -195,6 +199,8 @@ func Test_DirectArrayT(t *testing.T) {
195199
?,
196200
?,
197201
?,
202+
?,
203+
?,
198204
?
199205
)
200206
`
@@ -239,6 +245,8 @@ func Test_DirectArrayT(t *testing.T) {
239245
clickhouse.ArrayDateTime([]time.Time{time.Now(), time.Now()}),
240246
clickhouse.Array([]string{"a", "b"}),
241247
clickhouse.Array([]string{"c", "d"}),
248+
clickhouse.Array([]string{"1.2.3.4", "2.2.3.4"}),
249+
clickhouse.Array([]string{"2001:0db8:85a3:0000:0000:8a2e:0370:7334"}),
242250
})
243251
if !assert.NoError(t, err) {
244252
return

clickhouse_test.go

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ func Test_Insert(t *testing.T) {
8989
string String,
9090
fString FixedString(2),
9191
date Date,
92-
datetime DateTime
92+
datetime DateTime,
93+
ipv4 IPv4,
94+
ipv6 IPv6
9395
) Engine=Memory
9496
`
9597
dml = `
@@ -107,7 +109,9 @@ func Test_Insert(t *testing.T) {
107109
string,
108110
fString,
109111
date,
110-
datetime
112+
datetime,
113+
ipv4,
114+
ipv6
111115
) VALUES (
112116
?,
113117
?,
@@ -122,6 +126,8 @@ func Test_Insert(t *testing.T) {
122126
?,
123127
?,
124128
?,
129+
?,
130+
?,
125131
?
126132
)
127133
`
@@ -140,7 +146,9 @@ func Test_Insert(t *testing.T) {
140146
string,
141147
fString,
142148
date,
143-
datetime
149+
datetime,
150+
ipv4,
151+
ipv6
144152
FROM clickhouse_test_insert
145153
`
146154
)
@@ -158,6 +166,8 @@ func Test_Insert(t *testing.T) {
158166
"RU", //fixedstring,
159167
time.Now(), //date
160168
time.Now(), //datetime
169+
"1.2.3.4", // ipv4
170+
"2001:0db8:85a3:0000:0000:8a2e:0370:7334", //ipv6
161171
)
162172
if !assert.NoError(t, err) {
163173
return
@@ -182,6 +192,8 @@ func Test_Insert(t *testing.T) {
182192
FixedString string
183193
Date time.Time
184194
DateTime time.Time
195+
Ipv6 column.IP
196+
Ipv4 column.IP
185197
}
186198
if rows, err := connect.Query(query); assert.NoError(t, err) {
187199
var count int
@@ -202,6 +214,8 @@ func Test_Insert(t *testing.T) {
202214
&item.FixedString,
203215
&item.Date,
204216
&item.DateTime,
217+
&item.Ipv4,
218+
&item.Ipv6,
205219
)
206220
if !assert.NoError(t, err) {
207221
return
@@ -505,7 +519,9 @@ func Test_ArrayT(t *testing.T) {
505519
date Array(Date),
506520
datetime Array(DateTime),
507521
enum8 Array(Enum8 ('a' = 1, 'b' = 2)),
508-
enum16 Array(Enum16('c' = 1, 'd' = 2))
522+
enum16 Array(Enum16('c' = 1, 'd' = 2)),
523+
ipv4 Array(IPv4),
524+
ipv6 Array(IPv6)
509525
) Engine=Memory
510526
`
511527
dml = `
@@ -525,7 +541,9 @@ func Test_ArrayT(t *testing.T) {
525541
date,
526542
datetime,
527543
enum8,
528-
enum16
544+
enum16,
545+
ipv4,
546+
ipv6
529547
) VALUES (
530548
?,
531549
?,
@@ -542,6 +560,8 @@ func Test_ArrayT(t *testing.T) {
542560
?,
543561
?,
544562
?,
563+
?,
564+
?,
545565
?
546566
)
547567
`
@@ -560,7 +580,9 @@ func Test_ArrayT(t *testing.T) {
560580
string,
561581
fString,
562582
date,
563-
datetime
583+
datetime,
584+
ipv4,
585+
ipv6
564586
FROM clickhouse_test_array
565587
`
566588
)
@@ -587,6 +609,8 @@ func Test_ArrayT(t *testing.T) {
587609
[]time.Time{time.Now(), time.Now()},
588610
[]string{"a", "b"},
589611
[]string{"c", "d"},
612+
[]string{"127.0.0.1", "1.2.3.4"},
613+
[]string{"2001:0db8:85a3:0000:0000:8a2e:0370:7334"},
590614
)
591615
if !assert.NoError(t, err) {
592616
return
@@ -608,6 +632,8 @@ func Test_ArrayT(t *testing.T) {
608632
[]time.Time{time.Now(), time.Now()},
609633
[]string{"a", "b"},
610634
[]string{"c", "d"},
635+
[]string{"127.0.0.1", "1.2.3.4"},
636+
[]string{"2001:0db8:85a3:0000:0000:8a2e:0370:7334"},
611637
)
612638
if !assert.NoError(t, err) {
613639
return
@@ -630,6 +656,8 @@ func Test_ArrayT(t *testing.T) {
630656
FixedString []string
631657
Date []time.Time
632658
DateTime []time.Time
659+
Ipv4 []column.IP
660+
Ipv6 []column.IP
633661
}
634662
if rows, err := connect.Query(query); assert.NoError(t, err) {
635663
var count int
@@ -650,6 +678,8 @@ func Test_ArrayT(t *testing.T) {
650678
&item.FixedString,
651679
&item.Date,
652680
&item.DateTime,
681+
&item.Ipv4,
682+
&item.Ipv6,
653683
)
654684
if !assert.NoError(t, err) {
655685
return
@@ -678,6 +708,10 @@ func Test_ArrayT(t *testing.T) {
678708
item.Date,
679709
item.DateTime,
680710
)
711+
t.Logf("Ipv4=%v, Ipv6=%v",
712+
item.Ipv4,
713+
item.Ipv6,
714+
)
681715
}
682716
assert.Equal(t, int(20), count)
683717
}

lib/column/ip.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"database/sql/driver"
99
"errors"
1010
"net"
11+
"strings"
1112
)
1213

1314
var (
@@ -56,11 +57,15 @@ func (ip *IP) Scan(value interface{}) (err error) {
5657
err = errInvalidScanValue
5758
}
5859
case string:
59-
if len(v) == 4 || len(v) == 16 {
60-
*ip = IP([]byte(v))
61-
} else {
60+
if v == "" {
6261
err = errInvalidScanValue
62+
return
63+
}
64+
if strings.Contains(v, ":") {
65+
*ip = IP(net.ParseIP(v))
66+
return
6367
}
68+
*ip = IP(net.ParseIP(v).To4())
6469
case net.IP:
6570
*ip = IP(v)
6671
default:

lib/column/ip_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,17 @@ func Test_IPConverter(t *testing.T) {
3535
assert.True(t, ip.Equal(net.IP(ip2)), fmt.Sprintf("Invalid ip restore: %s != %s", ip, ip2))
3636
}
3737
}
38+
39+
if assert.NoError(t, err) {
40+
err = ip2.Scan(ips)
41+
if assert.NoError(t, err) {
42+
assert.True(t, ip.Equal(net.IP(ip2)), fmt.Sprintf("Invalid ip restore: %s != %s", ip, ip2))
43+
}
44+
}
3845
}
46+
ip := IP(net.ParseIP(""))
47+
assert.Equal(t, errInvalidScanValue, ip.Scan(""))
48+
assert.Equal(t, errInvalidScanValue, ip.Scan([]byte{'1', '2', '3'}))
49+
assert.Equal(t, errInvalidScanType, ip.Scan(1))
50+
3951
}

0 commit comments

Comments
 (0)