MCPcopy Create free account
hub / github.com/bytebase/bytebase / extractStatement

Function extractStatement

backend/plugin/parser/pg/restore.go:255–287  ·  view source on GitHub ↗
(statement string, backupItem *storepb.PriorBackupDetail_Item)

Source from the content-addressed store, hash-verified

253}
254
255func extractStatement(statement string, backupItem *storepb.PriorBackupDetail_Item) (string, error) {
256 if backupItem == nil {
257 return "", errors.Errorf("backup item is nil")
258 }
259
260 stmts, err := ParsePg(statement)
261 if err != nil {
262 return "", errors.Wrapf(err, "failed to parse statement")
263 }
264
265 var sqls []string
266 posMapper := base.NewByteOffsetPositionMapper(statement)
267 for _, stmt := range stmts {
268 if stmt.Empty() {
269 continue
270 }
271 switch stmt.AST.(type) {
272 case *ast.UpdateStmt, *ast.DeleteStmt:
273 nodeLoc := ast.NodeLoc(stmt.AST)
274 startPos := posMapper.Position(nodeLoc.Start)
275 startPos.Column-- // 0-based
276 endPos := posMapper.Position(nodeLoc.End)
277 if inRange(startPos, endPos, backupItem.StartPosition, backupItem.EndPosition) {
278 // Extract statement text without trailing semicolon/whitespace.
279 text := strings.TrimRight(strings.TrimSpace(stmt.Text), ";")
280 sqls = append(sqls, text)
281 }
282 default:
283 }
284 }
285
286 return strings.Join(sqls, ";\n"), nil
287}
288
289func inRange(start, end, targetStart, targetEnd *storepb.Position) bool {
290 if start.Line < targetStart.Line || (start.Line == targetStart.Line && start.Column < targetStart.Column) {

Callers 1

GenerateRestoreSQLFunction · 0.70

Calls 6

PositionMethod · 0.95
ParsePgFunction · 0.85
ErrorfMethod · 0.80
JoinMethod · 0.80
inRangeFunction · 0.70

Tested by

no test coverage detected