1- import { GenericContainer } from 'testcontainers' ;
1+ import { ClickhouseDBRunner } from '@cubejs-backend/testing-shared' ;
2+ import { streamToArray } from '@cubejs-backend/shared' ;
23
3- import { ClickHouseDriver } from '../src/ClickHouseDriver' ;
4-
5- const streamToArray = require ( 'stream-to-array' ) ;
4+ import { ClickHouseDriver } from '../src' ;
65
76describe ( 'ClickHouseDriver' , ( ) => {
7+ jest . setTimeout ( 20 * 1000 ) ;
8+
89 let container : any ;
910 let config : any ;
1011
@@ -20,13 +21,7 @@ describe('ClickHouseDriver', () => {
2021
2122 // eslint-disable-next-line func-names
2223 beforeAll ( async ( ) => {
23- jest . setTimeout ( 20 * 1000 ) ;
24-
25- const version = process . env . TEST_CLICKHOUSE_VERSION || 'latest' ;
26-
27- container = await new GenericContainer ( `yandex/clickhouse-server:${ version } ` )
28- . withExposedPorts ( 8123 )
29- . start ( ) ;
24+ container = await ClickhouseDBRunner . startContainer ( { } ) ;
3025
3126 config = {
3227 host : 'localhost' ,
@@ -35,13 +30,14 @@ describe('ClickHouseDriver', () => {
3530
3631 await doWithDriver ( async ( driver ) => {
3732 await driver . createSchemaIfNotExists ( 'test' ) ;
38- // Unsupported in old servers
39- // datetime64 DateTime64,
4033 await driver . query (
4134 `
4235 CREATE TABLE test.types_test (
4336 date Date,
4437 datetime DateTime,
38+ datetime64_millis DateTime64(3, 'UTC'),
39+ datetime64_micros DateTime64(6, 'UTC'),
40+ datetime64_nanos DateTime64(9, 'UTC'),
4541 int8 Int8,
4642 int16 Int16,
4743 int32 Int32,
@@ -60,17 +56,17 @@ describe('ClickHouseDriver', () => {
6056 [ ]
6157 ) ;
6258
63- await driver . query ( 'INSERT INTO test.types_test VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)' , [
64- '2020-01-01' , '2020-01-01 00:00:00' , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1.01 , 1.01 , 1.01
59+ await driver . query ( 'INSERT INTO test.types_test VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? )' , [
60+ '2020-01-01' , '2020-01-01 00:00:00' , '2020-01-01 00:00:00.000' , '2020-01-01 00:00:00.000000' , '2020-01-01 00:00:00.000000000' , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1.01 , 1.01 , 1.01
6561 ] ) ;
66- await driver . query ( 'INSERT INTO test.types_test VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)' , [
67- '2020-01-02' , '2020-01-02 00:00:00' , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2.02 , 2.02 , 2.02
62+ await driver . query ( 'INSERT INTO test.types_test VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? )' , [
63+ '2020-01-02' , '2020-01-02 00:00:00' , '2020-01-02 00:00:00.123' , '2020-01-02 00:00:00.123456' , '2020-01-02 00:00:00.123456789' , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2.02 , 2.02 , 2.02
6864 ] ) ;
69- await driver . query ( 'INSERT INTO test.types_test VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)' , [
70- '2020-01-03' , '2020-01-03 00:00:00' , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3.03 , 3.03 , 3.03
65+ await driver . query ( 'INSERT INTO test.types_test VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? )' , [
66+ '2020-01-03' , '2020-01-03 00:00:00' , '2020-01-03 00:00:00.234' , '2020-01-03 00:00:00.234567' , '2020-01-03 00:00:00.234567890' , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3.03 , 3.03 , 3.03
7167 ] ) ;
7268 } ) ;
73- } ) ;
69+ } , 30 * 1000 ) ;
7470
7571 // eslint-disable-next-line func-names
7672 afterAll ( async ( ) => {
@@ -83,7 +79,7 @@ describe('ClickHouseDriver', () => {
8379 if ( container ) {
8480 await container . stop ( ) ;
8581 }
86- } ) ;
82+ } , 30 * 1000 ) ;
8783
8884 it ( 'should construct' , async ( ) => {
8985 await doWithDriver ( async ( ) => {
@@ -160,8 +156,9 @@ describe('ClickHouseDriver', () => {
160156 expect ( values ) . toEqual ( [ {
161157 date : '2020-01-01T00:00:00.000' ,
162158 datetime : '2020-01-01T00:00:00.000' ,
163- // Unsupported in old servers
164- // datetime64: '2020-01-01T00:00:00.00.000',
159+ datetime64_millis : '2020-01-01T00:00:00.000' ,
160+ datetime64_micros : '2020-01-01T00:00:00.000' ,
161+ datetime64_nanos : '2020-01-01T00:00:00.000' ,
165162 int8 : '1' ,
166163 int16 : '1' ,
167164 int32 : '1' ,
@@ -252,8 +249,9 @@ describe('ClickHouseDriver', () => {
252249 expect ( tableData . types ) . toEqual ( [
253250 { name : 'date' , type : 'date' } ,
254251 { name : 'datetime' , type : 'timestamp' } ,
255- // Unsupported in old servers
256- // { name: 'datetime64', type: 'timestamp' },
252+ { name : 'datetime64_millis' , type : 'timestamp' } ,
253+ { name : 'datetime64_micros' , type : 'timestamp' } ,
254+ { name : 'datetime64_nanos' , type : 'timestamp' } ,
257255 { name : 'int8' , type : 'int' } ,
258256 { name : 'int16' , type : 'int' } ,
259257 { name : 'int32' , type : 'int' } ,
@@ -268,10 +266,10 @@ describe('ClickHouseDriver', () => {
268266 { name : 'decimal64' , type : 'decimal' } ,
269267 { name : 'decimal128' , type : 'decimal' } ,
270268 ] ) ;
271- expect ( await streamToArray ( tableData . rowStream ) ) . toEqual ( [
272- [ '2020-01-01T00:00:00.000' , '2020-01-01T00:00:00.000' , '1' , '1' , '1' , '1' , '1' , '1' , '1' , '1' , '1' , '1' , '1.01' , '1.01' , '1.01' ] ,
273- [ '2020-01-02T00:00:00.000' , '2020-01-02T00:00:00.000' , '2' , '2' , '2' , '2' , '2' , '2' , '2' , '2' , '2' , '2' , '2.02' , '2.02' , '2.02' ] ,
274- [ '2020-01-03T00:00:00.000' , '2020-01-03T00:00:00.000' , '3' , '3' , '3' , '3' , '3' , '3' , '3' , '3' , '3' , '3' , '3.03' , '3.03' , '3.03' ] ,
269+ expect ( await streamToArray ( tableData . rowStream as any ) ) . toEqual ( [
270+ [ '2020-01-01T00:00:00.000' , '2020-01-01T00:00:00.000' , '2020-01-01T00:00:00.000' , '2020-01-01T00:00:00.000' , '2020-01-01T00:00:00.000' , ' 1', '1' , '1' , '1' , '1' , '1' , '1' , '1' , '1' , '1' , '1.01' , '1.01' , '1.01' ] ,
271+ [ '2020-01-02T00:00:00.000' , '2020-01-02T00:00:00.000' , '2020-01-02T00:00:00.123' , '2020-01-02T00:00:00.123' , '2020-01-02T00:00:00.123' , ' 2', '2' , '2' , '2' , '2' , '2' , '2' , '2' , '2' , '2' , '2.02' , '2.02' , '2.02' ] ,
272+ [ '2020-01-03T00:00:00.000' , '2020-01-03T00:00:00.000' , '2020-01-03T00:00:00.234' , '2020-01-03T00:00:00.234' , '2020-01-03T00:00:00.234' , ' 3', '3' , '3' , '3' , '3' , '3' , '3' , '3' , '3' , '3' , '3.03' , '3.03' , '3.03' ] ,
275273 ] ) ;
276274 } finally {
277275 // @ts -ignore
0 commit comments