Skip to content

Commit e5c0d87

Browse files
authored
Merge pull request #283 from goccy/update-zetasqlite
Update zetasqlite to v0.19.1
2 parents 369e12b + 6a2a833 commit e5c0d87

File tree

4 files changed

+54
-31
lines changed

4 files changed

+54
-31
lines changed

go.mod

+4-4
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ require (
1212
github.com/goccy/go-json v0.10.0
1313
github.com/goccy/go-yaml v1.9.5
1414
github.com/goccy/go-zetasql v0.5.5
15-
github.com/goccy/go-zetasqlite v0.19.0
15+
github.com/goccy/go-zetasqlite v0.19.1
1616
github.com/google/go-cmp v0.5.9
1717
github.com/googleapis/gax-go/v2 v2.11.0
1818
github.com/gorilla/mux v1.8.0
@@ -75,11 +75,11 @@ require (
7575
go.opencensus.io v0.24.0 // indirect
7676
go.uber.org/atomic v1.7.0 // indirect
7777
go.uber.org/multierr v1.6.0 // indirect
78-
golang.org/x/crypto v0.16.0 // indirect
78+
golang.org/x/crypto v0.21.0 // indirect
7979
golang.org/x/mod v0.10.0 // indirect
80-
golang.org/x/net v0.19.0 // indirect
80+
golang.org/x/net v0.21.0 // indirect
8181
golang.org/x/oauth2 v0.11.0 // indirect
82-
golang.org/x/sys v0.15.0 // indirect
82+
golang.org/x/sys v0.18.0 // indirect
8383
golang.org/x/text v0.14.0 // indirect
8484
golang.org/x/tools v0.9.1 // indirect
8585
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect

go.sum

+8-8
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ github.com/goccy/go-yaml v1.9.5 h1:Eh/+3uk9kLxG4koCX6lRMAPS1OaMSAi+FJcya0INdB0=
9494
github.com/goccy/go-yaml v1.9.5/go.mod h1:U/jl18uSupI5rdI2jmuCswEA2htH9eXfferR3KfscvA=
9595
github.com/goccy/go-zetasql v0.5.5 h1:3JpXt3p2533rnZMu09upCcI7YJ2KfjKgdo2Lu0xo+fU=
9696
github.com/goccy/go-zetasql v0.5.5/go.mod h1:xvvooX2RG404vnbdFZuAM8bTFksYwVUlqeIUrUNuo40=
97-
github.com/goccy/go-zetasqlite v0.19.0 h1:pvWFw/QThPP5a3UMkgirIsb9/5tlfUq25DggFfhI86o=
98-
github.com/goccy/go-zetasqlite v0.19.0/go.mod h1:ThavIQcmI6a/sVTpvJtj+idUui32gwbnXe1jeb7pISY=
97+
github.com/goccy/go-zetasqlite v0.19.1 h1:yebtcyHgSNnNywan6FbI93uxJ6GXDpVMoqTlfT/Bdm4=
98+
github.com/goccy/go-zetasqlite v0.19.1/go.mod h1:ThavIQcmI6a/sVTpvJtj+idUui32gwbnXe1jeb7pISY=
9999
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
100100
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
101101
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
@@ -250,8 +250,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
250250
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
251251
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
252252
golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
253-
golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
254-
golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
253+
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
254+
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
255255
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
256256
golang.org/x/exp v0.0.0-20220827204233-334a2380cb91 h1:tnebWN09GYg9OLPss1KXj8txwZc6X6uMr6VFdcGNbHw=
257257
golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
@@ -278,8 +278,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
278278
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
279279
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
280280
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
281-
golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
282-
golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
281+
golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
282+
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
283283
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
284284
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
285285
golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU=
@@ -314,8 +314,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
314314
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
315315
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
316316
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
317-
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
318-
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
317+
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
318+
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
319319
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
320320
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
321321
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

internal/contentdata/repository.go

+41-18
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"database/sql"
66
"fmt"
77
"reflect"
8-
"sort"
98
"strings"
109

1110
"github.com/goccy/go-zetasqlite"
@@ -371,34 +370,58 @@ func (r *Repository) AddTableData(ctx context.Context, tx *connection.Tx, projec
371370
_ = tx.MetadataRepoMode()
372371
}()
373372

374-
var columns []string
373+
var columns []*types.Column
375374
for _, col := range table.Columns {
376-
columns = append(columns, col.Name)
377-
}
378-
sort.Strings(columns)
379-
rows := make([]string, 0, len(table.Data))
380-
values := make([]interface{}, 0, len(table.Data)*len(columns))
381-
for _, data := range table.Data {
382-
placeholders := make([]string, 0, len(data))
383-
for _, col := range columns {
384-
values = append(values, data[col])
385-
placeholders = append(placeholders, "?")
386-
}
387-
rows = append(rows, fmt.Sprintf("(%s)", strings.Join(placeholders, ",")))
375+
columns = append(columns, col)
388376
}
377+
378+
placeholders := make([]string, 0, len(columns))
389379
columnsWithEscape := make([]string, 0, len(columns))
390380
for _, col := range columns {
391-
columnsWithEscape = append(columnsWithEscape, fmt.Sprintf("`%s`", col))
381+
placeholders = append(placeholders, "?")
382+
columnsWithEscape = append(columnsWithEscape, fmt.Sprintf("`%s`", col.Name))
392383
}
384+
393385
query := fmt.Sprintf(
394-
"INSERT `%s` (%s) VALUES %s",
386+
"INSERT `%s` (%s) VALUES (%s)",
395387
r.tablePath(projectID, datasetID, table.ID),
396388
strings.Join(columnsWithEscape, ","),
397-
strings.Join(rows, ","),
389+
strings.Join(placeholders, ","),
398390
)
399-
if _, err := tx.Tx().ExecContext(ctx, query, values...); err != nil {
391+
392+
stmt, err := tx.Tx().PrepareContext(ctx, query)
393+
if err != nil {
400394
return err
401395
}
396+
397+
for _, data := range table.Data {
398+
values := make([]interface{}, 0, len(table.Columns))
399+
400+
for _, column := range columns {
401+
if value, found := data[column.Name]; found {
402+
isTimestampColumn := column.Type == types.TIMESTAMP
403+
inputString, isInputString := value.(string)
404+
405+
if isInputString && isTimestampColumn {
406+
parsedTimestamp, err := zetasqlite.TimeFromTimestampValue(inputString)
407+
// If we could parse the timestamp, use it when inserting, otherwise fallback to the supplied value
408+
if err == nil {
409+
values = append(values, parsedTimestamp)
410+
continue
411+
}
412+
}
413+
414+
values = append(values, value)
415+
} else {
416+
values = append(values, nil)
417+
}
418+
}
419+
420+
if _, err := stmt.ExecContext(ctx, values...); err != nil {
421+
return err
422+
}
423+
}
424+
402425
return nil
403426
}
404427

internal/types/types.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ func Format(schema *bigqueryv2.TableSchema, rows []*TableRow, useInt64Timestamp
192192
for _, row := range rows {
193193
cells := make([]*TableCell, 0, len(row.F))
194194
for colIdx, cell := range row.F {
195-
if schema.Fields[colIdx].Type == "TIMESTAMP" {
195+
if schema.Fields[colIdx].Type == "TIMESTAMP" && cell.V != nil {
196196
t, _ := zetasqlite.TimeFromTimestampValue(cell.V.(string))
197197
microsec := t.UnixNano() / int64(time.Microsecond)
198198
cells = append(cells, &TableCell{

0 commit comments

Comments
 (0)