MCPcopy Index your code
hub / github.com/bytebase/bytebase / prepareTransformation

Function prepareTransformation

backend/plugin/parser/plsql/backup.go:185–227  ·  view source on GitHub ↗
(databaseName, statement string)

Source from the content-addressed store, hash-verified

183}
184
185func prepareTransformation(databaseName, statement string) ([]statementInfo, error) {
186 statements, err := SplitSQL(statement)
187 if err != nil {
188 return nil, errors.Wrap(err, "failed to split PLSQL")
189 }
190
191 var result []statementInfo
192 positionMapper := base.NewByteOffsetPositionMapper(statement)
193 for i, stmt := range statements {
194 if stmt.Empty {
195 continue
196 }
197 list, err := ParsePLSQLOmni(stmt.Text)
198 if err != nil {
199 return nil, errors.Wrap(err, "failed to parse PLSQL")
200 }
201 for _, item := range list.Items {
202 raw, ok := item.(*oracleast.RawStmt)
203 if !ok || raw.Stmt == nil {
204 continue
205 }
206 info := extractOmniDML(databaseName, raw.Stmt, stmt.Text)
207 if info == nil {
208 continue
209 }
210 info.offset = i
211 if stmt.Range != nil {
212 info.startPosition = positionMapper.Position(int(stmt.Range.Start) + raw.Loc.Start)
213 info.endPosition = positionMapper.Position(int(stmt.Range.Start) + max(raw.Loc.End-1, raw.Loc.Start))
214 } else {
215 info.startPosition = stmt.Start
216 info.endPosition = stmt.End
217 }
218 info.fullSQL = stmt.Text
219 result = append(result, *info)
220 }
221 }
222
223 if len(result) == 0 {
224 return nil, errNoBackupableDML
225 }
226 return result, nil
227}
228
229func extractOmniDML(databaseName string, node oracleast.StmtNode, fullSQL string) *statementInfo {
230 switch n := node.(type) {

Callers 2

TransformDMLToSelectFunction · 0.70
extractSQLFunction · 0.70

Calls 5

PositionMethod · 0.95
ParsePLSQLOmniFunction · 0.85
extractOmniDMLFunction · 0.85
SplitSQLFunction · 0.70

Tested by

no test coverage detected