(columnName string, columnType *types.FieldType, value tidbast.ExprNode)
| 1128 | } |
| 1129 | |
| 1130 | func checkDefault(columnName string, columnType *types.FieldType, value tidbast.ExprNode) *storepb.Advice { |
| 1131 | if value.GetType().GetType() != mysql.TypeNull { |
| 1132 | switch columnType.GetType() { |
| 1133 | case mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeJSON, mysql.TypeGeometry: |
| 1134 | content := fmt.Sprintf("BLOB, TEXT, GEOMETRY or JSON column `%s` can't have a default value", columnName) |
| 1135 | return &storepb.Advice{ |
| 1136 | Status: storepb.Advice_ERROR, |
| 1137 | Code: code.InvalidColumnDefault.Int32(), |
| 1138 | Title: content, |
| 1139 | Content: content, |
| 1140 | StartPosition: &storepb.Position{Line: 0}, |
| 1141 | } |
| 1142 | default: |
| 1143 | // Other column types allow default values |
| 1144 | } |
| 1145 | } |
| 1146 | |
| 1147 | if valueExpr, yes := value.(tidbast.ValueExpr); yes { |
| 1148 | datum := types.NewDatum(valueExpr.GetValue()) |
| 1149 | if _, err := datum.ConvertTo(types.Context{}, columnType); err != nil { |
| 1150 | return &storepb.Advice{ |
| 1151 | Status: storepb.Advice_ERROR, |
| 1152 | Code: code.InvalidColumnDefault.Int32(), |
| 1153 | Title: err.Error(), |
| 1154 | Content: err.Error(), |
| 1155 | StartPosition: &storepb.Position{Line: 0}, |
| 1156 | } |
| 1157 | } |
| 1158 | } |
| 1159 | return nil |
| 1160 | } |
| 1161 | |
| 1162 | func tidbCreateColumnHelper(t *model.TableMetadata, column *tidbast.ColumnDef, position *tidbast.ColumnPosition) *storepb.Advice { |
| 1163 | if t.GetColumn(column.Name.Name.L) != nil { |
no test coverage detected