-
Notifications
You must be signed in to change notification settings - Fork 219
Expand file tree
/
Copy pathchecksumtable.go
More file actions
48 lines (42 loc) · 1.25 KB
/
checksumtable.go
File metadata and controls
48 lines (42 loc) · 1.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*
* Radon
*
* Copyright 2018 The Radon Authors.
* Code is licensed under the GPLv3.
*
*/
package proxy
import (
"fmt"
"github.com/xelabs/go-mysqlstack/driver"
"github.com/xelabs/go-mysqlstack/sqlparser"
querypb "github.com/xelabs/go-mysqlstack/sqlparser/depends/query"
"github.com/xelabs/go-mysqlstack/sqlparser/depends/sqltypes"
)
// handleChecksumTable used to handle the 'CHECKSUM TABLE ' command.
func (spanner *Spanner) handleChecksumTable(session *driver.Session, query string, node sqlparser.Statement) (*sqltypes.Result, error) {
database := session.Schema()
ast := node.(*sqlparser.Checksum)
table := ast.Table.Name.String()
qr, err := spanner.ExecuteNormal(session, database, query, ast)
if err != nil {
return nil, err
}
// Merge checksum.
var crc uint32
for _, row := range qr.Rows {
crc += uint32((row[1].ToNative().(int64)))
}
newqr := &sqltypes.Result{}
newqr.RowsAffected = 1
newqr.Fields = []*querypb.Field{
{Name: "Table", Type: querypb.Type_VARCHAR},
{Name: "Checksum", Type: querypb.Type_INT64},
}
row := []sqltypes.Value{
sqltypes.MakeTrusted(querypb.Type_VARCHAR, []byte(table)),
sqltypes.MakeTrusted(querypb.Type_INT64, []byte(fmt.Sprintf("%v", crc))),
}
newqr.Rows = append(newqr.Rows, row)
return newqr, nil
}