(databaseName, tableName string, uniqueKeyColumns *ColumnList)
| 124 | } |
| 125 | |
| 126 | func NewCheckpointQueryBuilder(databaseName, tableName string, uniqueKeyColumns *ColumnList) (*CheckpointInsertQueryBuilder, error) { |
| 127 | if uniqueKeyColumns.Len() == 0 { |
| 128 | return nil, fmt.Errorf("got 0 columns in BuildSetCheckpointInsertQuery") |
| 129 | } |
| 130 | values := buildColumnsPreparedValues(uniqueKeyColumns) |
| 131 | minUniqueColNames := []string{} |
| 132 | maxUniqueColNames := []string{} |
| 133 | for _, name := range uniqueKeyColumns.Names() { |
| 134 | minColName := TruncateColumnName(name, MaxColumnNameLength-4) + "_min" |
| 135 | maxColName := TruncateColumnName(name, MaxColumnNameLength-4) + "_max" |
| 136 | minUniqueColNames = append(minUniqueColNames, minColName) |
| 137 | maxUniqueColNames = append(maxUniqueColNames, maxColName) |
| 138 | } |
| 139 | databaseName = EscapeName(databaseName) |
| 140 | tableName = EscapeName(tableName) |
| 141 | stmt := fmt.Sprintf(` |
| 142 | insert /* gh-ost */ |
| 143 | into %s.%s |
| 144 | (gh_ost_chk_timestamp, gh_ost_chk_coords, gh_ost_chk_iteration, |
| 145 | gh_ost_rows_copied, gh_ost_dml_applied, gh_ost_is_cutover, |
| 146 | %s, %s) |
| 147 | values |
| 148 | (unix_timestamp(now()), ?, ?, |
| 149 | ?, ?, ?, |
| 150 | %s, %s)`, |
| 151 | databaseName, tableName, |
| 152 | strings.Join(minUniqueColNames, ", "), |
| 153 | strings.Join(maxUniqueColNames, ", "), |
| 154 | strings.Join(values, ", "), |
| 155 | strings.Join(values, ", "), |
| 156 | ) |
| 157 | |
| 158 | b := &CheckpointInsertQueryBuilder{ |
| 159 | uniqueKeyColumns: uniqueKeyColumns, |
| 160 | preparedStatement: stmt, |
| 161 | } |
| 162 | return b, nil |
| 163 | } |
| 164 | |
| 165 | // BuildQuery builds the insert query. |
| 166 | func (b *CheckpointInsertQueryBuilder) BuildQuery(uniqueKeyArgs []interface{}) (string, []interface{}, error) { |
searching dependent graphs…