|
1 | 1 | import XCTest
|
2 | 2 | @testable import ClickHouseVapor
|
| 3 | +import Foundation |
3 | 4 | import Vapor
|
4 | 5 |
|
5 | 6 | extension Application {
|
@@ -29,6 +30,39 @@ public class TestModel: ClickHouseModel {
|
29 | 30 | @Field(key: "fixed", isLowCardinality: true, fixedStringLen: 10)
|
30 | 31 | var fixed: [ String ]
|
31 | 32 |
|
| 33 | + @Field(key: "arr") |
| 34 | + var arr: [ [Int64] ] |
| 35 | + |
| 36 | + /// Not implemented on test-server |
| 37 | + // @Field(key: "bol") |
| 38 | + // var bol: [ Bool ] |
| 39 | + |
| 40 | + @Field(key: "dat") |
| 41 | + var dat: [ClickHouseDate] |
| 42 | + |
| 43 | + |
| 44 | + /// Not implemented on test-server |
| 45 | + // @Field(key: "dat32") |
| 46 | + // var dat32: [ClickHouseDate32] |
| 47 | + |
| 48 | + @Field(key: "datt") |
| 49 | + var datt: [ ClickHouseDateTime ] |
| 50 | + |
| 51 | + @Field(key: "dattz", timeZone: "'GMT'") |
| 52 | + var dattz: [ ClickHouseDateTime ] |
| 53 | + |
| 54 | + @Field(key: "datt64", precision: 3) |
| 55 | + var datt64: [ ClickHouseDateTime64 ] |
| 56 | + |
| 57 | + @Field(key: "datt64z", precision: 3,timeZone: "'GMT'") |
| 58 | + var datt64z: [ ClickHouseDateTime64 ] |
| 59 | + |
| 60 | + @Field(key: "en8", mapping: ["a": 0, "b": 1]) |
| 61 | + var en8: [ ClickHouseEnum8 ] |
| 62 | + |
| 63 | + @Field(key: "en16", mapping: ["a": 12, "b": 1, "c": 600]) |
| 64 | + var en16: [ ClickHouseEnum16 ] |
| 65 | + |
32 | 66 | @Field(key: "temperature")
|
33 | 67 | var temperature: [Float]
|
34 | 68 |
|
@@ -76,25 +110,50 @@ final class ClickHouseVaporTests: XCTestCase {
|
76 | 110 |
|
77 | 111 | model.id = [ "x010", "ax51", "cd22" ]
|
78 | 112 | model.fixed = [ "", "123456", "12345678901234" ]
|
| 113 | + model.arr = [[1], [], [76, 56, 2]] |
| 114 | + model.dat = [.clickhouseDefault, .clickhouseDefault, .clickhouseDefault] |
| 115 | + model.datt = [.clickhouseDefault, .clickhouseDefault, .clickhouseDefault] |
| 116 | + model.datt64 = [.clickhouseDefault, .clickhouseDefault, .clickhouseDefault] |
| 117 | + model.datt64z = [.clickhouseDefault, .clickhouseDefault, .clickhouseDefault] |
| 118 | + model.dattz = [.clickhouseDefault, .clickhouseDefault, .clickhouseDefault] |
| 119 | + model.en8 = [.init(word: "a"), .init(word: "b"), .init(word: "a")] |
| 120 | + model.en16 = [.init(word: "a"), .init(word: "b"), .init(word: "c")] |
79 | 121 | model.timestamp = [ 100, 200, 300 ]
|
80 | 122 | model.temperature = [ 11.1, 10.4, 8.9 ]
|
81 | 123 |
|
82 | 124 | let createQuery = TestModel.engine.createTableQuery(columns: model.properties)
|
83 |
| - XCTAssertEqual(createQuery, """ |
84 |
| - CREATE TABLE IF NOT EXISTS `test` (timestamp Int64,stationID LowCardinality(String),fixed LowCardinality(FixedString(10)),temperature Float32) |
| 125 | + XCTAssertEqual(createQuery |
| 126 | + .replacingOccurrences(of: "Enum8('b'=1,'a'=0)", with: "Enum8('a'=0,'b'=1)") |
| 127 | + .replacingOccurrences(of: "Enum16('b'=1,'a'=12,'c'=600)", with: "Enum16('a'=12,'b'=1,'c'=600)") |
| 128 | + .replacingOccurrences(of: "Enum16('b'=1,'c'=600,'a'=12)", with: "Enum16('a'=12,'b'=1,'c'=600)") |
| 129 | + .replacingOccurrences(of: "Enum16('a'=12,'c'=600,'b'=1)", with: "Enum16('a'=12,'b'=1,'c'=600)") |
| 130 | + .replacingOccurrences(of: "Enum16('c'=600,'b'=1,'a'=12)", with: "Enum16('a'=12,'b'=1,'c'=600)") |
| 131 | + .replacingOccurrences(of: "Enum16('c'=600,'a'=12,'b'=1)", with: "Enum16('a'=12,'b'=1,'c'=600)"), |
| 132 | + """ |
| 133 | + CREATE TABLE IF NOT EXISTS `test` (timestamp Int64,stationID LowCardinality(String),fixed LowCardinality(FixedString(10)),arr Array(Int64),dat Date,datt DateTime,dattz DateTime('GMT'),datt64 DateTime64(3),datt64z DateTime64(3, 'GMT'),en8 Enum8('a'=0,'b'=1),en16 Enum16('a'=12,'b'=1,'c'=600),temperature Float32) |
85 | 134 | ENGINE = ReplacingMergeTree()
|
86 | 135 | PRIMARY KEY (timestamp,stationID) PARTITION BY (toYYYYMM(toDateTime(timestamp))) ORDER BY (timestamp,stationID)
|
87 | 136 | """)
|
88 |
| - |
89 | 137 | try! TestModel.createTable(on: app.clickHouse).wait()
|
90 | 138 | try! model.insert(on: app.clickHouse).wait()
|
91 |
| - |
92 | 139 | let model2 = try! TestModel.select(on: app.clickHouse).wait()
|
93 | 140 |
|
94 | 141 | XCTAssertEqual(model.temperature, model2.temperature)
|
95 | 142 | XCTAssertEqual(model.id, model2.id)
|
96 | 143 | XCTAssertEqual(["", "123456", "1234567890"], model2.fixed)
|
97 | 144 | XCTAssertEqual(model.timestamp, model2.timestamp)
|
| 145 | + XCTAssertEqual(model.dat.map { $0.date}, [Date(timeIntervalSince1970: 0.0), Date(timeIntervalSince1970: 0.0), Date(timeIntervalSince1970: 0.0)]) |
| 146 | + XCTAssertEqual(model2.dat.map { $0.date}, [Date(timeIntervalSince1970: 0.0), Date(timeIntervalSince1970: 0.0), Date(timeIntervalSince1970: 0.0)]) |
| 147 | + XCTAssertEqual(model.datt.map { $0.date}, [Date(timeIntervalSince1970: 0.0), Date(timeIntervalSince1970: 0.0), Date(timeIntervalSince1970: 0.0)]) |
| 148 | + XCTAssertEqual(model2.datt.map { $0.date}, [Date(timeIntervalSince1970: 0.0), Date(timeIntervalSince1970: 0.0), Date(timeIntervalSince1970: 0.0)]) |
| 149 | + XCTAssertEqual(model.dattz.map { $0.date}, [Date(timeIntervalSince1970: 0.0), Date(timeIntervalSince1970: 0.0), Date(timeIntervalSince1970: 0.0)]) |
| 150 | + XCTAssertEqual(model2.dattz.map { $0.date}, [Date(timeIntervalSince1970: 0.0), Date(timeIntervalSince1970: 0.0), Date(timeIntervalSince1970: 0.0)]) |
| 151 | + XCTAssertEqual(model.en8.map { $0.word}, ["a", "b", "a"]) |
| 152 | + XCTAssertEqual(model2.en8.map { $0.word}, ["a", "b", "a"]) |
| 153 | + XCTAssertEqual(model.en16.map { $0.word}, ["a", "b", "c"]) |
| 154 | + XCTAssertEqual(model2.en16.map { $0.word}, ["a", "b", "c"]) |
| 155 | + XCTAssertEqual(model.arr, [[1], [], [76, 56, 2]]) |
| 156 | + XCTAssertEqual(model2.arr, [[1], [], [76, 56, 2]]) |
98 | 157 |
|
99 | 158 | let filtered = try! TestModel.select(
|
100 | 159 | on: app.clickHouse,
|
|
0 commit comments