@@ -22,7 +22,8 @@ import (
2222)
2323
2424func (c * MySqlConnector ) tableRowEstimate (ctx context.Context , schema string , table string ) (int64 , error ) {
25- rs , err := c .Execute (ctx , "select table_rows from information_schema.tables where table_schema=? and table_name=?" , schema , table )
25+ rs , err := c .Execute (ctx , fmt .Sprintf ("select table_rows from information_schema.tables where table_schema='%s' and table_name='%s'" ,
26+ mysql .Escape (schema ), mysql .Escape (table )))
2627 if err != nil {
2728 return 0 , fmt .Errorf ("failed to query information schema for row count estimate: %w" , err )
2829 }
@@ -61,12 +62,13 @@ func (c *MySqlConnector) GetQRepPartitions(
6162 var minmaxQuery string
6263 var minmaxHasCount bool
6364 if last != nil && last .Range != nil {
65+ // partial query, append minVal later
6466 if numPartitions == 0 {
6567 minmaxHasCount = true
66- minmaxQuery = fmt .Sprintf ("SELECT MIN(`%[2]s`),MAX(`%[2]s`),COUNT(*) FROM %[1]s WHERE `%[2]s` > ? " ,
68+ minmaxQuery = fmt .Sprintf ("SELECT MIN(`%[2]s`),MAX(`%[2]s`),COUNT(*) FROM %[1]s WHERE `%[2]s` > " ,
6769 parsedWatermarkTable .MySQL (), config .WatermarkColumn )
6870 } else {
69- minmaxQuery = fmt .Sprintf ("SELECT MIN(`%[2]s`),MAX(`%[2]s`) FROM %[1]s WHERE `%[2]s` > ? " ,
71+ minmaxQuery = fmt .Sprintf ("SELECT MIN(`%[2]s`),MAX(`%[2]s`) FROM %[1]s WHERE `%[2]s` > " ,
7072 parsedWatermarkTable .MySQL (), config .WatermarkColumn )
7173 }
7274 } else if numPartitions == 0 {
@@ -94,20 +96,20 @@ func (c *MySqlConnector) GetQRepPartitions(
9496 }
9597 }
9698
97- var minVal any
9899 var rs * mysql.Result
99100 if last != nil && last .Range != nil {
101+ var minVal string
100102 switch lastRange := last .Range .Range .(type ) {
101103 case * protos.PartitionRange_IntRange :
102- minVal = lastRange .IntRange .End
104+ minVal = strconv . FormatInt ( lastRange .IntRange .End , 10 )
103105 case * protos.PartitionRange_UintRange :
104- minVal = lastRange .UintRange .End
106+ minVal = strconv . FormatUint ( lastRange .UintRange .End , 10 )
105107 case * protos.PartitionRange_TimestampRange :
106- minVal = lastRange .TimestampRange .End .AsTime ().String ()
108+ minVal = "'" + lastRange .TimestampRange .End .AsTime ().Format ( "2006-01-02 15:04:05.999999" ) + "'"
107109 }
108110
109- c .logger .Info ("querying min/max" , slog .String ("query" , minmaxQuery ), slog .Any ("minVal" , minVal ))
110- rs , err = c .Execute (ctx , minmaxQuery , minVal )
111+ c .logger .Info ("querying min/max" , slog .String ("query" , minmaxQuery ), slog .String ("minVal" , minVal ))
112+ rs , err = c .Execute (ctx , minmaxQuery + minVal )
111113 } else {
112114 c .logger .Info ("querying min/max" , slog .String ("query" , minmaxQuery ))
113115 rs , err = c .Execute (ctx , minmaxQuery )
0 commit comments