null+****@clear*****
null+****@clear*****
2011年 12月 19日 (月) 14:35:16 JST
Kouhei Sutou 2011-12-19 05:35:16 +0000 (Mon, 19 Dec 2011) New Revision: 1eed577940e5f5e5ee4adba40c593627b307633c Log: use enum_field_types. Modified files: ha_mroonga.cc Modified: ha_mroonga.cc (+30 -18) =================================================================== --- ha_mroonga.cc 2011-12-18 03:37:22 +0000 (928da8e) +++ ha_mroonga.cc 2011-12-19 05:35:16 +0000 (a574093) @@ -502,38 +502,50 @@ static bool mrn_is_geo_key(KEY *key_info) key_info->key_part[0].field->type() == MYSQL_TYPE_GEOMETRY; } -static grn_builtin_type mrn_get_type(grn_ctx *ctx, int mysql_field_type) +static grn_builtin_type mrn_get_type(grn_ctx *ctx, + enum_field_types mysql_field_type) { + grn_builtin_type type; switch (mysql_field_type) { case MYSQL_TYPE_BIT: // bit case MYSQL_TYPE_ENUM: // enum case MYSQL_TYPE_SET: // set case MYSQL_TYPE_TINY: // tinyint - return GRN_DB_INT8; + type = GRN_DB_INT8; + break; case MYSQL_TYPE_SHORT: // smallint - return GRN_DB_INT16; // 2bytes + type = GRN_DB_INT16; // 2bytes + break; case MYSQL_TYPE_INT24: // mediumint case MYSQL_TYPE_LONG: // int - return GRN_DB_INT32; // 4bytes + type = GRN_DB_INT32; // 4bytes + break; case MYSQL_TYPE_LONGLONG: // bigint - return GRN_DB_INT64; // 8bytes + type = GRN_DB_INT64; // 8bytes + break; case MYSQL_TYPE_FLOAT: // float case MYSQL_TYPE_DOUBLE: // double - return GRN_DB_FLOAT; // 8bytes + type = GRN_DB_FLOAT; // 8bytes + break; case MYSQL_TYPE_DATE: // date case MYSQL_TYPE_TIME: // time case MYSQL_TYPE_YEAR: // year case MYSQL_TYPE_DATETIME: // datetime - return GRN_DB_TIME; // micro sec from epoc time by int64 + type = GRN_DB_TIME; // micro sec from epoc time by int64 + break; case MYSQL_TYPE_GEOMETRY: // geometry - return GRN_DB_WGS84_GEO_POINT; // geo point in WGS84 + type = GRN_DB_WGS84_GEO_POINT; // geo point in WGS84 + break; + default: + // tinytext=256, text=64K, mediumtext=16M, longtext=4G + // tinyblob... + // GRN_DB_SHORTTEXT 4096bytes + // GRN_DB_TEXT ???bytes + // GRN_DB_LONGTEXT ???bytes + type = GRN_DB_TEXT; // others + break; } - // tinytext=256, text=64K, mediumtext=16M, longtext=4G - // tinyblob... - // GRN_DB_SHORTTEXT 4096bytes - // GRN_DB_TEXT ???bytes - // GRN_DB_LONGTEXT ???bytes - return GRN_DB_TEXT; // others + return type; } static int mrn_set_geometry(grn_ctx *ctx, grn_obj *buf, @@ -1539,7 +1551,7 @@ int ha_mroonga::wrapper_validate_key_info(KEY *key_info) for (i = 0; i < key_info->key_parts; i++) { Field *field = key_info->key_part[i].field; - int mysql_field_type = field->type(); + enum_field_types mysql_field_type = field->type(); grn_builtin_type gtype = mrn_get_type(ctx, mysql_field_type); if (gtype != GRN_DB_TEXT) { @@ -1767,7 +1779,7 @@ int ha_mroonga::storage_create(const char *name, TABLE *table, int column_name_size = strlen(column_name); is_id = (strncmp(MRN_COLUMN_NAME_ID, column_name, column_name_size) == 0); - int mysql_field_type = pkey_field->type(); + enum_field_types mysql_field_type = pkey_field->type(); grn_builtin_type gtype = mrn_get_type(ctx, mysql_field_type); pkey_type = grn_ctx_at(ctx, gtype); } else { @@ -1825,7 +1837,7 @@ int ha_mroonga::storage_create(const char *name, TABLE *table, } grn_obj_flags col_flags = GRN_OBJ_PERSISTENT | GRN_OBJ_COLUMN_SCALAR; - int mysql_field_type = field->type(); + enum_field_types mysql_field_type = field->type(); grn_builtin_type gtype = mrn_get_type(ctx, mysql_field_type); col_type = grn_ctx_at(ctx, gtype); char *col_path = NULL; // we don't specify path @@ -1956,7 +1968,7 @@ int ha_mroonga::storage_create_index(TABLE *table, const char *grn_table_name, } column = grn_obj_column(ctx, grn_table, column_name, column_name_size); - int mysql_field_type = field->type(); + enum_field_types mysql_field_type = field->type(); grn_builtin_type groonga_type = mrn_get_type(ctx, mysql_field_type); index_type = grn_ctx_at(ctx, groonga_type); } else {