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

Function generateSQLForTable

backend/plugin/parser/tsql/backup.go:117–170  ·  view source on GitHub ↗
(statementInfoList []statementInfo, targetDatabase string, tablePrefix string)

Source from the content-addressed store, hash-verified

115}
116
117func generateSQLForTable(statementInfoList []statementInfo, targetDatabase string, tablePrefix string) (*base.BackupStatement, error) {
118 table := statementInfoList[0].table
119
120 targetTable := fmt.Sprintf("%s_%s_%s", tablePrefix, table.Table, table.Database)
121 targetTable, _ = common.TruncateString(targetTable, maxTableNameLength)
122 var buf strings.Builder
123 if _, err := fmt.Fprintf(&buf, "SELECT * INTO [%s].[%s].[%s] FROM (\n", targetDatabase, defaultSchema, targetTable); err != nil {
124 return nil, errors.Wrap(err, "failed to write buffer")
125 }
126 for i, item := range statementInfoList {
127 if i > 0 {
128 if _, err := buf.WriteString("\n UNION\n"); err != nil {
129 return nil, errors.Wrap(err, "failed to write buffer")
130 }
131 }
132 topClause, fromClause, err := extractSuffixSelectStatement(item.node, item.statement)
133 if err != nil {
134 return nil, errors.Wrap(err, "failed to extract suffix select statement")
135 }
136 if len(item.table.Alias) == 0 {
137 if _, err := fmt.Fprintf(&buf, " SELECT [%s].[%s].[%s].* ", item.table.Database, item.table.Schema, item.table.Table); err != nil {
138 return nil, errors.Wrap(err, "failed to write buffer")
139 }
140 } else {
141 if _, err := fmt.Fprintf(&buf, " SELECT [%s].* ", item.table.Alias); err != nil {
142 return nil, errors.Wrap(err, "failed to write buffer")
143 }
144 }
145 if len(topClause) > 0 {
146 if _, err := buf.WriteString(topClause); err != nil {
147 return nil, errors.Wrap(err, "failed to write buffer")
148 }
149 if _, err := buf.WriteString(" "); err != nil {
150 return nil, errors.Wrap(err, "failed to write buffer")
151 }
152 }
153 if len(fromClause) > 0 {
154 if _, err := buf.WriteString(fromClause); err != nil {
155 return nil, errors.Wrap(err, "failed to write buffer")
156 }
157 }
158 }
159 if _, err := buf.WriteString(") AS backup_table;"); err != nil {
160 return nil, errors.Wrap(err, "failed to write buffer")
161 }
162 return &base.BackupStatement{
163 Statement: buf.String(),
164 SourceSchema: table.Schema,
165 SourceTableName: table.Table,
166 TargetTableName: targetTable,
167 StartPosition: statementInfoList[0].startPosition,
168 EndPosition: statementInfoList[len(statementInfoList)-1].endPosition,
169 }, nil
170}
171
172func extractSuffixSelectStatement(node ast.Node, source string) (string, string, error) {
173 switch n := node.(type) {

Callers 1

generateSQLFunction · 0.70

Calls 3

TruncateStringFunction · 0.92
StringMethod · 0.65

Tested by

no test coverage detected