[Groonga-mysql-commit] mroonga/mroonga [master] check column size for mrn_get_type

Back to archive index

null+****@clear***** null+****@clear*****
2011年 12月 20日 (火) 03:09:04 JST


Kentoku	2011-12-19 18:09:04 +0000 (Mon, 19 Dec 2011)

  New Revision: 4940d1cfa1ee892b5b5269c264ad1b4a3c40c11f

  Log:
    check column size for mrn_get_type

  Modified files:
    ha_mroonga.cc

  Modified: ha_mroonga.cc (+18 -18)
===================================================================
--- ha_mroonga.cc    2011-12-19 09:01:35 +0000 (2af0b24)
+++ ha_mroonga.cc    2011-12-19 18:09:04 +0000 (cfd41f6)
@@ -524,12 +524,12 @@ static grn_builtin_type mrn_grn_type_from_field(grn_ctx *ctx, Field *field,
   case MYSQL_TYPE_LONG:         // INT; 4bytes
     type = GRN_DB_INT32;        // 4bytes
     break;
-  case MYSQL_TYPE_FLOAT:        // FLOAT; 4bytes
+  case MYSQL_TYPE_FLOAT:        // FLOAT; 4 or 8bytes
   case MYSQL_TYPE_DOUBLE:       // DOUBLE; 8bytes
     type = GRN_DB_FLOAT;        // 8bytes
     break;
-  case MYSQL_TYPE_NULL:         // NULL; ???
-    type = GRN_DB_INT8;         // XXX: Is it OK?
+  case MYSQL_TYPE_NULL:         // NULL; 1byte
+    type = GRN_DB_INT8;         // 1byte
     break;
   case MYSQL_TYPE_TIMESTAMP:    // TIMESTAMP; 4bytes
     type = GRN_DB_TIME;         // 8bytes
@@ -540,14 +540,14 @@ static grn_builtin_type mrn_grn_type_from_field(grn_ctx *ctx, Field *field,
   case MYSQL_TYPE_INT24:        // MEDIUMINT; 3bytes
     type = GRN_DB_INT32;        // 4bytes
     break;
-  case MYSQL_TYPE_DATE:         // DATE; 3bytes
+  case MYSQL_TYPE_DATE:         // DATE; 4bytes
   case MYSQL_TYPE_TIME:         // TIME; 3bytes
   case MYSQL_TYPE_DATETIME:     // DATETIME; 8bytes
   case MYSQL_TYPE_YEAR:         // YEAR; 1byte
-  case MYSQL_TYPE_NEWDATE:      // ???
+  case MYSQL_TYPE_NEWDATE:      // DATE; 3bytes
     type = GRN_DB_TIME;         // 8bytes
     break;
-  case MYSQL_TYPE_VARCHAR:      // VARCHAR; <= 64KB + 1bytes
+  case MYSQL_TYPE_VARCHAR:      // VARCHAR; <= 64KB * 4 + 2bytes
     if (for_index_key) {
       type = GRN_DB_SHORT_TEXT; // 4Kbytes
     } else {
@@ -563,44 +563,44 @@ static grn_builtin_type mrn_grn_type_from_field(grn_ctx *ctx, Field *field,
   case MYSQL_TYPE_BIT:          // BIT; <= 8bytes
     type = GRN_DB_INT64;        // 8bytes
     break;
-  case MYSQL_TYPE_NEWDECIMAL:   // ???
+  case MYSQL_TYPE_NEWDECIMAL:   // DECIMAL; <= 9bytes
     type = GRN_DB_SHORT_TEXT;   // 4Kbytes
     break;
   case MYSQL_TYPE_ENUM:         // ENUM; <= 2bytes
-    type = GRN_DB_INT8;         // 1byte
+    // type = GRN_DB_INT8;         // 1byte
     // XXX: Should we use INT16?
-    // type = GRN_DB_INT16;        // 2bytes
+    type = GRN_DB_INT16;        // 2bytes
     break;
   case MYSQL_TYPE_SET:          // SET; <= 8bytes
-    type = GRN_DB_INT8;         // 1byte
+    // type = GRN_DB_INT8;         // 1byte
     // XXX: Should we use INT64?
-    // type = GRN_DB_INT64;        // 8bytes
+    type = GRN_DB_INT64;        // 8bytes
     break;
-  case MYSQL_TYPE_TINY_BLOB:    // TINYBLOB; <= 256bytes
+  case MYSQL_TYPE_TINY_BLOB:    // TINYBLOB; <= 256bytes + 1byte
     type = GRN_DB_SHORT_TEXT;   // 4Kbytes
     break;
-  case MYSQL_TYPE_MEDIUM_BLOB:  // MEDIUMBLOB; <= 16Mbytes + 2bytes
+  case MYSQL_TYPE_MEDIUM_BLOB:  // MEDIUMBLOB; <= 16Mbytes + 3bytes
     if (for_index_key) {
       type = GRN_DB_SHORT_TEXT; // 4Kbytes
     } else {
       type = GRN_DB_LONG_TEXT;  // 2Gbytes
     }
     break;
-  case MYSQL_TYPE_LONG_BLOB:    // LONGBLOB; <= 4Gbytes + 3bytes
+  case MYSQL_TYPE_LONG_BLOB:    // LONGBLOB; <= 4Gbytes + 4bytes
     if (for_index_key) {
       type = GRN_DB_SHORT_TEXT; // 4Kbytes
     } else {
       type = GRN_DB_LONG_TEXT;  // 2Gbytes
     }
     break;
-  case MYSQL_TYPE_BLOB:         // BLOB; <= 64Kbytes + 1bytes
+  case MYSQL_TYPE_BLOB:         // BLOB; <= 64Kbytes + 2bytes
     if (for_index_key) {
       type = GRN_DB_SHORT_TEXT; // 4Kbytes
     } else {
       type = GRN_DB_LONG_TEXT;  // 2Gbytes
     }
     break;
-  case MYSQL_TYPE_VAR_STRING:   // ??? VARCHAR???; <= 64KB + 1bytes
+  case MYSQL_TYPE_VAR_STRING:   // VARCHAR; <= 255byte * 4 + 1bytes
     if (for_index_key) {
       type = GRN_DB_SHORT_TEXT; // 4Kbytes
     } else {
@@ -613,11 +613,11 @@ static grn_builtin_type mrn_grn_type_from_field(grn_ctx *ctx, Field *field,
       }
     }
     break;
-  case MYSQL_TYPE_STRING:       // ??? CHAR???; < 1Kbytes =~ (255 * 4)bytes
+  case MYSQL_TYPE_STRING:       // CHAR; < 1Kbytes =~ (255 * 4)bytes
                                 //              4 is the maximum size of a character
     type = GRN_DB_SHORT_TEXT;   // 4Kbytes
     break;
-  case MYSQL_TYPE_GEOMETRY:     // ???bytes
+  case MYSQL_TYPE_GEOMETRY:     // case-by-case
     type = GRN_DB_WGS84_GEO_POINT; // 8bytes
     break;
   }




Groonga-mysql-commit メーリングリストの案内
Back to archive index