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

Commit b3d043f

Browse files
author
Sergei Sobolev
committed
add tests on rows.ColumnTypes
1 parent b596500 commit b3d043f

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

clickhouse_decimal_test.go

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package clickhouse_test
2+
3+
import (
4+
"database/sql"
5+
"github.com/stretchr/testify/assert"
6+
"testing"
7+
)
8+
9+
func Test_Decimal(t *testing.T) {
10+
const (
11+
ddl = `
12+
CREATE TABLE clickhouse_test_nullable (
13+
decimal Decimal(18,5),
14+
decimalNullable Nullable(Decimal(15,3))
15+
) Engine=Memory;
16+
`
17+
dml = `
18+
INSERT INTO clickhouse_test_nullable (
19+
decimal,
20+
decimalNullable
21+
) VALUES (
22+
?,
23+
?
24+
)
25+
`
26+
query = `
27+
SELECT
28+
decimal,
29+
decimalNullable
30+
FROM clickhouse_test_nullable
31+
`
32+
)
33+
if connect, err := sql.Open("clickhouse", "tcp://127.0.0.1:9000?debug=true"); assert.NoError(t, err) {
34+
if tx, err := connect.Begin(); assert.NoError(t, err) {
35+
if _, err := connect.Exec("DROP TABLE IF EXISTS clickhouse_test_nullable"); assert.NoError(t, err) {
36+
if _, err := tx.Exec(ddl); assert.NoError(t, err) {
37+
if tx, err := connect.Begin(); assert.NoError(t, err) {
38+
if stmt, err := tx.Prepare(dml); assert.NoError(t, err) {
39+
for i := 0; i < 10; i++ {
40+
if _, err := stmt.Exec(
41+
16.55,
42+
nil,
43+
); !assert.NoError(t, err) {
44+
t.Fatal(err)
45+
}
46+
}
47+
}
48+
if err := tx.Commit(); !assert.NoError(t, err) {
49+
t.Fatal(err)
50+
}
51+
}
52+
if rows, err := connect.Query(query); assert.NoError(t, err) {
53+
columnTypes, err := rows.ColumnTypes()
54+
assert.NoError(t, err)
55+
for i, column := range columnTypes {
56+
switch i {
57+
case 0:
58+
nullable, nullableOk := column.Nullable()
59+
assert.False(t, nullable)
60+
assert.True(t, nullableOk)
61+
62+
precision, scale, ok := column.DecimalSize()
63+
assert.Equal(t, int64(5), scale)
64+
assert.Equal(t, int64(18), precision)
65+
assert.True(t, ok)
66+
case 1:
67+
nullable, nullableOk := column.Nullable()
68+
assert.True(t, nullable)
69+
assert.True(t, nullableOk)
70+
71+
precision, scale, ok := column.DecimalSize()
72+
assert.Equal(t, int64(3), scale)
73+
assert.Equal(t, int64(15), precision)
74+
assert.True(t, ok)
75+
}
76+
}
77+
for rows.Next() {
78+
var (
79+
decimal = new(int)
80+
decimalNullable = new(int)
81+
)
82+
if err := rows.Scan(
83+
&decimal,
84+
&decimalNullable,
85+
); assert.NoError(t, err) {
86+
if assert.NotNil(t, decimal) {
87+
assert.Equal(t, int(1655000), *decimal)
88+
}
89+
assert.Nil(t, decimalNullable)
90+
91+
//t.Log(
92+
// *decimal,
93+
// *decimalNullable,
94+
//)
95+
}
96+
}
97+
}
98+
}
99+
}
100+
}
101+
}
102+
}

0 commit comments

Comments
 (0)