1package clickhouse_test 2 3import ( 4 "database/sql/driver" 5 "fmt" 6 7 // "fmt" 8 "net" 9 "testing" 10 "time" 11 12 "github.com/ClickHouse/clickhouse-go" 13 "github.com/ClickHouse/clickhouse-go/lib/column" 14 "github.com/ClickHouse/clickhouse-go/lib/types" 15 "github.com/stretchr/testify/assert" 16) 17 18func Test_DirectInsert(t *testing.T) { 19 const ( 20 ddl = ` 21 CREATE TABLE clickhouse_test_direct_insert ( 22 int8 Int8, 23 int16 Int16, 24 int32 Int32, 25 int64 Int64, 26 uint8 UInt8, 27 uint16 UInt16, 28 uint32 UInt32, 29 uint64 UInt64, 30 float32 Float32, 31 float64 Float64, 32 string String, 33 fString FixedString(2), 34 date Date, 35 datetime DateTime, 36 enum8 Enum8 ('a' = 1, 'b' = 2), 37 enum16 Enum16('c' = 1, 'd' = 2), 38 uuid FixedString(16), 39 ip FixedString(16) 40 ) Engine=Memory 41 ` 42 dml = ` 43 INSERT INTO clickhouse_test_direct_insert ( 44 int8, 45 int16, 46 int32, 47 int64, 48 uint8, 49 uint16, 50 uint32, 51 uint64, 52 float32, 53 float64, 54 string, 55 fString, 56 date, 57 datetime, 58 enum8, 59 enum16, 60 uuid, 61 ip 62 ) VALUES ( 63 ?, 64 ?, 65 ?, 66 ?, 67 ?, 68 ?, 69 ?, 70 ?, 71 ?, 72 ?, 73 ?, 74 ?, 75 ?, 76 ?, 77 ?, 78 ?, 79 ?, 80 ? 81 ) 82 ` 83 ) 84 if connect, err := clickhouse.Open("tcp://127.0.0.1:9000?debug=true"); assert.NoError(t, err) { 85 { 86 var ( 87 tx, _ = connect.Begin() 88 stmt, _ = connect.Prepare("DROP TABLE IF EXISTS clickhouse_test_direct_insert") 89 ) 90 stmt.Exec([]driver.Value{}) 91 tx.Commit() 92 } 93 { 94 if tx, err := connect.Begin(); assert.NoError(t, err) { 95 if stmt, err := connect.Prepare(ddl); assert.NoError(t, err) { 96 if _, err := stmt.Exec([]driver.Value{}); assert.NoError(t, err) { 97 assert.NoError(t, tx.Commit()) 98 } 99 } 100 } 101 } 102 { 103 if tx, err := connect.Begin(); assert.NoError(t, err) { 104 if stmt, err := connect.Prepare(dml); assert.NoError(t, err) { 105 for i := 0; i < 100; i++ { 106 _, err := stmt.Exec([]driver.Value{ 107 int8(i), 108 int16(i), 109 int32(i), 110 int64(i), 111 112 uint8(i), 113 uint16(i), 114 uint32(i), 115 uint64(i), 116 117 float32(i), 118 float64(i), 119 120 "string", 121 "CH", 122 time.Now(), 123 time.Now(), 124 125 "a", 126 "d", 127 128 types.UUID("123e4567-e89b-12d3-a456-426655440000"), 129 column.IP(net.ParseIP("127.0.0.1")), 130 }) 131 if !assert.NoError(t, err) { 132 return 133 } 134 } 135 assert.NoError(t, tx.Commit()) 136 } 137 } 138 } 139 } 140} 141 142func Test_DirectArrayT(t *testing.T) { 143 const ( 144 ddl = ` 145 CREATE TABLE clickhouse_test_direct_array ( 146 int8 Array(Int8), 147 int16 Array(Int16), 148 int32 Array(Int32), 149 int64 Array(Int64), 150 uint8 Array(UInt8), 151 uint16 Array(UInt16), 152 uint32 Array(UInt32), 153 uint64 Array(UInt64), 154 float32 Array(Float32), 155 float64 Array(Float64), 156 string Array(String), 157 fString Array(FixedString(2)), 158 date Array(Date), 159 datetime Array(DateTime), 160 enum8 Array(Enum8 ('a' = 1, 'b' = 2)), 161 enum16 Array(Enum16('c' = 1, 'd' = 2)), 162 ipv4 Array(IPv4), 163 ipv6 Array(IPv6) 164 ) Engine=Memory 165 ` 166 dml = ` 167 INSERT INTO clickhouse_test_direct_array ( 168 int8, 169 int16, 170 int32, 171 int64, 172 uint8, 173 uint16, 174 uint32, 175 uint64, 176 float32, 177 float64, 178 string, 179 fString, 180 date, 181 datetime, 182 enum8, 183 enum16, 184 ipv4, 185 ipv6 186 ) VALUES ( 187 ?, 188 ?, 189 ?, 190 ?, 191 ?, 192 ?, 193 ?, 194 ?, 195 ?, 196 ?, 197 ?, 198 ?, 199 ?, 200 ?, 201 ?, 202 ?, 203 ?, 204 ? 205 ) 206 ` 207 ) 208 209 if connect, err := clickhouse.Open("tcp://127.0.0.1:9000?debug=true"); assert.NoError(t, err) { 210 { 211 var ( 212 tx, _ = connect.Begin() 213 stmt, _ = connect.Prepare("DROP TABLE IF EXISTS clickhouse_test_direct_array") 214 ) 215 stmt.Exec([]driver.Value{}) 216 tx.Commit() 217 } 218 { 219 if tx, err := connect.Begin(); assert.NoError(t, err) { 220 if stmt, err := connect.Prepare(ddl); assert.NoError(t, err) { 221 if _, err := stmt.Exec([]driver.Value{}); assert.NoError(t, err) { 222 assert.NoError(t, tx.Commit()) 223 } 224 } 225 } 226 } 227 { 228 if tx, err := connect.Begin(); assert.NoError(t, err) { 229 if stmt, err := connect.Prepare(dml); assert.NoError(t, err) { 230 for i := 0; i < 100; i++ { 231 _, err := stmt.Exec([]driver.Value{ 232 clickhouse.Array([]int8{1, 2, 3}), 233 clickhouse.Array([]int16{5, 6, 7}), 234 clickhouse.Array([]int32{8, 9, 10}), 235 clickhouse.Array([]int64{11, 12, 13}), 236 clickhouse.Array([]uint8{14, 15, 16}), 237 clickhouse.Array([]uint16{17, 18, 19}), 238 clickhouse.Array([]uint32{20, 21, 22}), 239 clickhouse.Array([]uint64{23, 24, 25}), 240 clickhouse.Array([]float32{32.1, 32.2}), 241 clickhouse.Array([]float64{64.1, 64.2}), 242 clickhouse.Array([]string{fmt.Sprintf("A_%d", i), "B", "C"}), 243 clickhouse.ArrayFixedString(2, []string{"RU", "EN", "DE"}), 244 clickhouse.ArrayDate([]time.Time{time.Now(), time.Now()}), 245 clickhouse.ArrayDateTime([]time.Time{time.Now(), time.Now()}), 246 clickhouse.Array([]string{"a", "b"}), 247 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"}), 250 }) 251 if !assert.NoError(t, err) { 252 return 253 } 254 } 255 assert.NoError(t, tx.Commit()) 256 } 257 } 258 } 259 } 260} 261