@@ -25,6 +25,92 @@ func (f fixedTableProvider) TableDefinitions() map[string]schema.Table {
2525func (f fixedTableProvider ) AutodiscoveryEnabled () bool { return false }
2626func (f fixedTableProvider ) RegisterTablesReloadListener (chan <- types.ReloadMessage ) {}
2727
28+ func TestApplyTimestampField (t * testing.T ) {
29+ indexConfig := map [string ]config.IndexConfiguration {
30+ "test" : {},
31+ }
32+
33+ fields := map [schema.FieldName ]schema.Field {
34+ "@timestamp" : {PropertyName : "@timestamp" , InternalPropertyName : "@timestamp" , InternalPropertyType : "DateTime64" , Type : schema .QuesmaTypeDate },
35+ "other_field" : {PropertyName : "other_field" , InternalPropertyName : "other_field" , InternalPropertyType : "String" , Type : schema .QuesmaTypeText },
36+ }
37+
38+ indexSchema := schema.Schema {
39+ Fields : fields ,
40+ }
41+
42+ tableMap := clickhouse .NewTableMap ()
43+ tableDiscovery := clickhouse .NewEmptyTableDiscovery ()
44+ tableDiscovery .TableMap = tableMap
45+
46+ tableMap .Store ("test" , & clickhouse.Table {
47+ Name : "test" ,
48+ DiscoveredTimestampFieldName : func () * string {
49+ field := "discovered_timestamp"
50+ return & field
51+ }(),
52+ })
53+
54+ transform := NewSchemaCheckPass (& config.QuesmaConfiguration {IndexConfig : indexConfig }, tableDiscovery , defaultSearchAfterStrategy )
55+
56+ tests := []struct {
57+ name string
58+ query * model.Query
59+ expected * model.Query
60+ }{
61+ {
62+ name : "replace @timestamp with discovered timestamp" ,
63+ query : & model.Query {
64+ TableName : "test" ,
65+ SelectCommand : model.SelectCommand {
66+ Columns : []model.Expr {
67+ model .NewColumnRef ("@timestamp" ),
68+ },
69+ },
70+ },
71+ expected : & model.Query {
72+ TableName : "test" ,
73+ SelectCommand : model.SelectCommand {
74+ Columns : []model.Expr {
75+ model .NewColumnRef ("discovered_timestamp" ),
76+ },
77+ },
78+ },
79+ },
80+ {
81+ name : "no replacement needed" ,
82+ query : & model.Query {
83+ TableName : "test" ,
84+ SelectCommand : model.SelectCommand {
85+ Columns : []model.Expr {
86+ model .NewColumnRef ("other_field" ),
87+ },
88+ },
89+ },
90+ expected : & model.Query {
91+ TableName : "test" ,
92+ SelectCommand : model.SelectCommand {
93+ Columns : []model.Expr {
94+ model .NewColumnRef ("other_field" ),
95+ },
96+ },
97+ },
98+ },
99+ }
100+
101+ for i , tt := range tests {
102+ t .Run (util .PrettyTestName (tt .name , i ), func (t * testing.T ) {
103+ tt .query .Schema = indexSchema
104+ tt .query .Indexes = []string {tt .query .TableName }
105+
106+ actual , err := transform .applyTimestampField (indexSchema , tt .query )
107+ assert .NoError (t , err )
108+
109+ assert .Equal (t , model .AsString (tt .expected .SelectCommand ), model .AsString (actual .SelectCommand ))
110+ })
111+ }
112+ }
113+
28114func Test_ipRangeTransform (t * testing.T ) {
29115 const isIPAddressInRangePrimitive = "isIPAddressInRange"
30116 const CASTPrimitive = "CAST"
0 commit comments