Skip to content

Commit abb4725

Browse files
committed
fix(kiro): use portable timestamp precision
Signed-off-by: warren <warren.chen830@gmail.com>
1 parent 444548f commit abb4725

4 files changed

Lines changed: 59 additions & 4 deletions

File tree

‎backend/plugins/kiro/models/chat_log.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ type KiroChatLog struct {
4444
UserId string `gorm:"type:varchar(64);index" json:"userId"`
4545
// IdentityStoreId is the stripped prefix, retained for auditability.
4646
IdentityStoreId string `gorm:"type:varchar(32)" json:"identityStoreId"`
47-
Timestamp time.Time `gorm:"type:datetime(6);index" json:"timestamp"`
47+
Timestamp time.Time `gorm:"precision:6;index" json:"timestamp"`
4848
// ChatTriggerType is MANUAL or INLINE_CHAT per the docs; only MANUAL has
4949
// been observed. Not validated against a fixed set.
5050
ChatTriggerType string `gorm:"type:varchar(20)" json:"chatTriggerType"`

‎backend/plugins/kiro/models/completion_log.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ type KiroCompletionLog struct {
4040

4141
UserId string `gorm:"type:varchar(64);index" json:"userId"`
4242
IdentityStoreId string `gorm:"type:varchar(32)" json:"identityStoreId"`
43-
Timestamp time.Time `gorm:"type:datetime(6);index" json:"timestamp"`
43+
Timestamp time.Time `gorm:"precision:6;index" json:"timestamp"`
4444

4545
// FileName has no path component; see the type comment.
4646
FileName string `gorm:"type:varchar(255);index" json:"fileName"`

‎backend/plugins/kiro/models/migrationscripts/archived/init.go‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ type KiroChatLog struct {
127127
RequestId string `gorm:"primaryKey;type:varchar(64)"`
128128
UserId string `gorm:"type:varchar(64);index" json:"userId"`
129129
IdentityStoreId string `gorm:"type:varchar(32)" json:"identityStoreId"`
130-
Timestamp time.Time `gorm:"type:datetime(6);index" json:"timestamp"`
130+
Timestamp time.Time `gorm:"precision:6;index" json:"timestamp"`
131131
ChatTriggerType string `gorm:"type:varchar(20)" json:"chatTriggerType"`
132132
ModelId *string `gorm:"type:varchar(100)" json:"modelId"`
133133
HasPrompt bool `gorm:"index" json:"hasPrompt"`
@@ -152,7 +152,7 @@ type KiroCompletionLog struct {
152152
RequestId string `gorm:"primaryKey;type:varchar(64)"`
153153
UserId string `gorm:"type:varchar(64);index" json:"userId"`
154154
IdentityStoreId string `gorm:"type:varchar(32)" json:"identityStoreId"`
155-
Timestamp time.Time `gorm:"type:datetime(6);index" json:"timestamp"`
155+
Timestamp time.Time `gorm:"precision:6;index" json:"timestamp"`
156156
FileName string `gorm:"type:varchar(255);index" json:"fileName"`
157157
FileExtension string `gorm:"type:varchar(50)" json:"fileExtension"`
158158
HasCustomization bool `json:"hasCustomization"`
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
Licensed to the Apache Software Foundation (ASF) under one or more
3+
contributor license agreements. See the NOTICE file distributed with
4+
this work for additional information regarding copyright ownership.
5+
The ASF licenses this file to You under the Apache License, Version 2.0
6+
(the "License"); you may not use this file except in compliance with
7+
the License. You may obtain a copy of the License at
8+
9+
http://www.apache.org/licenses/LICENSE-2.0
10+
11+
Unless required by applicable law or agreed to in writing, software
12+
distributed under the License is distributed on an "AS IS" BASIS,
13+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
See the License for the specific language governing permissions and
15+
limitations under the License.
16+
*/
17+
18+
package models
19+
20+
import (
21+
"sync"
22+
"testing"
23+
24+
"github.com/apache/incubator-devlake/plugins/kiro/models/migrationscripts/archived"
25+
"github.com/stretchr/testify/assert"
26+
"github.com/stretchr/testify/require"
27+
mysqlDriver "gorm.io/driver/mysql"
28+
postgresDriver "gorm.io/driver/postgres"
29+
"gorm.io/gorm/schema"
30+
)
31+
32+
func TestLogTimestampUsesPortableMicrosecondPrecision(t *testing.T) {
33+
logModels := []struct {
34+
name string
35+
model any
36+
}{
37+
{name: "chat runtime model", model: &KiroChatLog{}},
38+
{name: "completion runtime model", model: &KiroCompletionLog{}},
39+
{name: "chat migration model", model: &archived.KiroChatLog{}},
40+
{name: "completion migration model", model: &archived.KiroCompletionLog{}},
41+
}
42+
43+
for _, logModel := range logModels {
44+
t.Run(logModel.name, func(t *testing.T) {
45+
sch, err := schema.Parse(logModel.model, &sync.Map{}, schema.NamingStrategy{})
46+
require.NoError(t, err)
47+
48+
field := sch.LookUpField("Timestamp")
49+
require.NotNil(t, field)
50+
assert.Equal(t, 6, field.Precision)
51+
assert.Equal(t, "datetime(6) NULL", mysqlDriver.New(mysqlDriver.Config{}).DataTypeOf(field))
52+
assert.Equal(t, "timestamptz(6)", postgresDriver.New(postgresDriver.Config{}).DataTypeOf(field))
53+
})
54+
}
55+
}

0 commit comments

Comments
 (0)