| 1240 | */ |
| 1241 | |
| 1242 | int prepare_create_field(Create_field *sql_field, |
| 1243 | uint *blob_columns, |
| 1244 | longlong table_flags) |
| 1245 | { |
| 1246 | unsigned int dup_val_count; |
| 1247 | DBUG_ENTER("prepare_field"); |
| 1248 | |
| 1249 | /* |
| 1250 | This code came from mysql_prepare_create_table. |
| 1251 | Indent preserved to make patching easier |
| 1252 | */ |
| 1253 | DBUG_ASSERT(sql_field->charset); |
| 1254 | |
| 1255 | switch (sql_field->sql_type) { |
| 1256 | case MYSQL_TYPE_BLOB: |
| 1257 | case MYSQL_TYPE_MEDIUM_BLOB: |
| 1258 | case MYSQL_TYPE_TINY_BLOB: |
| 1259 | case MYSQL_TYPE_LONG_BLOB: |
| 1260 | sql_field->pack_flag=FIELDFLAG_BLOB | |
| 1261 | pack_length_to_packflag(sql_field->pack_length - |
| 1262 | portable_sizeof_char_ptr); |
| 1263 | if (sql_field->charset->state & MY_CS_BINSORT) |
| 1264 | sql_field->pack_flag|=FIELDFLAG_BINARY; |
| 1265 | sql_field->length=8; // Unireg field length |
| 1266 | sql_field->unireg_check=BLOB_FIELD; |
| 1267 | (*blob_columns)++; |
| 1268 | break; |
| 1269 | case MYSQL_TYPE_GEOMETRY: |
| 1270 | #ifdef HAVE_SPATIAL |
| 1271 | if (!(table_flags & HA_CAN_GEOMETRY)) |
| 1272 | { |
| 1273 | my_printf_error(ER_CHECK_NOT_IMPLEMENTED, ER(ER_CHECK_NOT_IMPLEMENTED), |
| 1274 | MYF(0), "GEOMETRY"); |
| 1275 | DBUG_RETURN(1); |
| 1276 | } |
| 1277 | sql_field->pack_flag=FIELDFLAG_GEOM | |
| 1278 | pack_length_to_packflag(sql_field->pack_length - |
| 1279 | portable_sizeof_char_ptr); |
| 1280 | if (sql_field->charset->state & MY_CS_BINSORT) |
| 1281 | sql_field->pack_flag|=FIELDFLAG_BINARY; |
| 1282 | sql_field->length=8; // Unireg field length |
| 1283 | sql_field->unireg_check=BLOB_FIELD; |
| 1284 | (*blob_columns)++; |
| 1285 | break; |
| 1286 | #else |
| 1287 | my_printf_error(ER_FEATURE_DISABLED,ER(ER_FEATURE_DISABLED), MYF(0), |
| 1288 | sym_group_geom.name, sym_group_geom.needed_define); |
| 1289 | DBUG_RETURN(1); |
| 1290 | #endif /*HAVE_SPATIAL*/ |
| 1291 | case MYSQL_TYPE_VARCHAR: |
| 1292 | #ifndef QQ_ALL_HANDLERS_SUPPORT_VARCHAR |
| 1293 | if (table_flags & HA_NO_VARCHAR) |
| 1294 | { |
| 1295 | /* convert VARCHAR to CHAR because handler is not yet up to date */ |
| 1296 | sql_field->sql_type= MYSQL_TYPE_VAR_STRING; |
| 1297 | sql_field->pack_length= calc_pack_length(sql_field->sql_type, |
| 1298 | (uint) sql_field->length); |
| 1299 | if ((sql_field->length / sql_field->charset->mbmaxlen) > |
no test coverage detected