From: Mayank Prasad Date: May 31 2011 2:30pm Subject: bzr commit into mysql-trunk branch (mayank.prasad:3134) WL#5885 List-Archive: http://lists.mysql.com/commits/138463 Message-Id: <201105311430.p4VEUc42017848@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0897035434==" --===============0897035434== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/mayank/mysql-tree/my_WL/5885/ based on revid:jimmy.yang@stripped 3134 Mayank Prasad 2011-05-31 WL#5885 : TIME/TIMESTAMP/DATETIME with fractional seconds, information_schema First Code drop for adding a new field in I_S.COLUMNS/PARAMETERS/ROUTINES. @ sql/field.h Added two new functions to: 1. return true if field has DATETIME_PRECISION. 2. return DATETIME_PRECISION for the field. @ sql/sql_show.cc Added : 1. A new field DATETIME_PRECISION in I_S.COLUMNS/PARAMETERS/ROUTINES 2. Added code to populate this new field and 3. Modified required indexes for displaying data from I_S.COLUMNS/PARAMETERS/ROUTINES. modified: sql/field.h sql/sql_show.cc === modified file 'sql/field.h' --- a/sql/field.h 2011-05-26 15:20:09 +0000 +++ b/sql/field.h 2011-05-31 14:30:13 +0000 @@ -476,6 +476,10 @@ public: virtual const CHARSET_INFO *sort_charset(void) const { return charset(); } virtual bool has_charset(void) const { return FALSE; } virtual void set_charset(const CHARSET_INFO *charset_arg) { } + /* returns TRUE if this field has DATETIME_PRECISION. */ + virtual bool has_dtprecision(void) const { return FALSE; } + /* returns DATETIME_PRECISION value for this field. */ + virtual longlong dtprecision(void){ return 0; } virtual enum Derivation derivation(void) const { return DERIVATION_IMPLICIT; } virtual uint repertoire(void) const { return MY_REPERTOIRE_UNICODE30; } === modified file 'sql/sql_show.cc' --- a/sql/sql_show.cc 2011-05-26 15:20:09 +0000 +++ b/sql/sql_show.cc 2011-05-31 14:30:13 +0000 @@ -4135,6 +4135,7 @@ err: /** @brief Store field characteristics into appropriate I_S table columns + starting from DATA_TYPE column till DTD_IDENTIFIER column. @param[in] table I_S table @param[in] field processed field @@ -4156,8 +4157,8 @@ void store_column_type(TABLE *table, Fie field->sql_type(column_type); /* DTD_IDENTIFIER column */ - table->field[offset + 7]->store(column_type.ptr(), column_type.length(), cs); - table->field[offset + 7]->set_notnull(); + table->field[offset + 8]->store(column_type.ptr(), column_type.length(), cs); + table->field[offset + 8]->set_notnull(); /* DATA_TYPE column: MySQL column type has the following format: @@ -4248,13 +4249,19 @@ void store_column_type(TABLE *table, Fie { /* CHARACTER_SET_NAME column*/ tmp_buff= field->charset()->csname; - table->field[offset + 5]->store(tmp_buff, strlen(tmp_buff), cs); - table->field[offset + 5]->set_notnull(); - /* COLLATION_NAME column */ - tmp_buff= field->charset()->name; table->field[offset + 6]->store(tmp_buff, strlen(tmp_buff), cs); table->field[offset + 6]->set_notnull(); + /* COLLATION_NAME column */ + tmp_buff= field->charset()->name; + table->field[offset + 7]->store(tmp_buff, strlen(tmp_buff), cs); + table->field[offset + 7]->set_notnull(); } + if (!field->has_dtprecision()) + { + /* DATETIME_PRECISION column*/ + table->field[offset + 5]->store(field->dtprecision(), TRUE); + table->field[offset + 5]->set_notnull(); + } } @@ -4329,7 +4336,7 @@ static int get_schema_column_record(THD end=strmov(end,grant_types.type_names[bitnr]); } } - table->field[17]->store(tmp+1,end == tmp ? 0 : (uint) (end-tmp-1), cs); + table->field[18]->store(tmp+1,end == tmp ? 0 : (uint) (end-tmp-1), cs); #endif table->field[0]->store(STRING_WITH_LEN("def"), cs); @@ -4339,7 +4346,7 @@ static int get_schema_column_record(THD cs); table->field[4]->store((longlong) count, TRUE); field->sql_type(type); - table->field[14]->store(type.ptr(), type.length(), cs); + table->field[15]->store(type.ptr(), type.length(), cs); if (get_field_default_value(thd, timestamp_field, field, &type, 0)) { @@ -4353,17 +4360,17 @@ static int get_schema_column_record(THD pos=(uchar*) ((field->flags & PRI_KEY_FLAG) ? "PRI" : (field->flags & UNIQUE_KEY_FLAG) ? "UNI" : (field->flags & MULTIPLE_KEY_FLAG) ? "MUL":""); - table->field[15]->store((const char*) pos, + table->field[16]->store((const char*) pos, strlen((const char*) pos), cs); if (field->unireg_check == Field::NEXT_NUMBER) - table->field[16]->store(STRING_WITH_LEN("auto_increment"), cs); + table->field[17]->store(STRING_WITH_LEN("auto_increment"), cs); if (timestamp_field == field && field->unireg_check != Field::TIMESTAMP_DN_FIELD) - table->field[16]->store(STRING_WITH_LEN("on update CURRENT_TIMESTAMP"), + table->field[17]->store(STRING_WITH_LEN("on update CURRENT_TIMESTAMP"), cs); - table->field[18]->store(field->comment.str, field->comment.length, cs); + table->field[19]->store(field->comment.str, field->comment.length, cs); if (schema_table_store_record(thd, table)) DBUG_RETURN(1); } @@ -4651,7 +4658,7 @@ bool store_schema_params(THD *thd, TABLE table->field[3]->store((longlong) 0, TRUE); get_field(thd->mem_root, proc_table->field[MYSQL_PROC_MYSQL_TYPE], &tmp_string); - table->field[14]->store(tmp_string.ptr(), tmp_string.length(), cs); + table->field[15]->store(tmp_string.ptr(), tmp_string.length(), cs); field_def= &sp->m_return_field_def; field= make_field(&share, (uchar*) 0, field_def->length, (uchar*) "", 0, field_def->pack_flag, @@ -4704,7 +4711,7 @@ bool store_schema_params(THD *thd, TABLE table->field[5]->set_notnull(); get_field(thd->mem_root, proc_table->field[MYSQL_PROC_MYSQL_TYPE], &tmp_string); - table->field[14]->store(tmp_string.ptr(), tmp_string.length(), cs); + table->field[15]->store(tmp_string.ptr(), tmp_string.length(), cs); field= make_field(&share, (uchar*) 0, field_def->length, (uchar*) "", 0, field_def->pack_flag, @@ -4821,40 +4828,40 @@ bool store_schema_proc(THD *thd, TABLE * if (full_access) { - copy_field_as_string(table->field[14], + copy_field_as_string(table->field[15], proc_table->field[MYSQL_PROC_FIELD_BODY_UTF8]); - table->field[14]->set_notnull(); + table->field[15]->set_notnull(); } - table->field[13]->store(STRING_WITH_LEN("SQL"), cs); - table->field[17]->store(STRING_WITH_LEN("SQL"), cs); - copy_field_as_string(table->field[18], + table->field[14]->store(STRING_WITH_LEN("SQL"), cs); + table->field[18]->store(STRING_WITH_LEN("SQL"), cs); + copy_field_as_string(table->field[19], proc_table->field[MYSQL_PROC_FIELD_DETERMINISTIC]); - table->field[19]->store(sp_data_access_name[enum_idx].str, + table->field[20]->store(sp_data_access_name[enum_idx].str, sp_data_access_name[enum_idx].length , cs); - copy_field_as_string(table->field[21], + copy_field_as_string(table->field[22], proc_table->field[MYSQL_PROC_FIELD_SECURITY_TYPE]); memset(&time, 0, sizeof(time)); ((Field_timestamp *) proc_table->field[MYSQL_PROC_FIELD_CREATED])-> get_time(&time); - table->field[22]->store_time(&time, MYSQL_TIMESTAMP_DATETIME); + table->field[23]->store_time(&time, MYSQL_TIMESTAMP_DATETIME); memset(&time, 0, sizeof(time)); ((Field_timestamp *) proc_table->field[MYSQL_PROC_FIELD_MODIFIED])-> get_time(&time); - table->field[23]->store_time(&time, MYSQL_TIMESTAMP_DATETIME); - copy_field_as_string(table->field[24], - proc_table->field[MYSQL_PROC_FIELD_SQL_MODE]); + table->field[24]->store_time(&time, MYSQL_TIMESTAMP_DATETIME); copy_field_as_string(table->field[25], + proc_table->field[MYSQL_PROC_FIELD_SQL_MODE]); + copy_field_as_string(table->field[26], proc_table->field[MYSQL_PROC_FIELD_COMMENT]); table->field[26]->store(definer.ptr(), definer.length(), cs); - copy_field_as_string(table->field[27], + copy_field_as_string(table->field[28], proc_table-> field[MYSQL_PROC_FIELD_CHARACTER_SET_CLIENT]); - copy_field_as_string(table->field[28], + copy_field_as_string(table->field[29], proc_table-> field[MYSQL_PROC_FIELD_COLLATION_CONNECTION]); - copy_field_as_string(table->field[29], + copy_field_as_string(table->field[30], proc_table->field[MYSQL_PROC_FIELD_DB_COLLATION]); return schema_table_store_record(thd, table); @@ -6558,7 +6565,7 @@ int make_table_names_old_format(THD *thd int make_columns_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table) { - int fields_arr[]= {3, 14, 13, 6, 15, 5, 16, 17, 18, -1}; + int fields_arr[]= {3, 15, 14, 6, 16, 5, 17, 18, 19, -1}; int *field_num= fields_arr; ST_FIELD_INFO *field_info; Name_resolution_context *context= &thd->lex->select_lex.context; @@ -6566,9 +6573,9 @@ int make_columns_old_format(THD *thd, ST for (; *field_num >= 0; field_num++) { field_info= &schema_table->fields_info[*field_num]; - if (!thd->lex->verbose && (*field_num == 13 || - *field_num == 17 || - *field_num == 18)) + if (!thd->lex->verbose && (*field_num == 14 || + *field_num == 18 || + *field_num == 19)) continue; Item_field *field= new Item_field(context, NullS, NullS, field_info->field_name); @@ -6612,7 +6619,7 @@ int make_character_sets_old_format(THD * int make_proc_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table) { - int fields_arr[]= {2, 3, 4, 26, 23, 22, 21, 25, 27, 28, 29, -1}; + int fields_arr[]= {2, 3, 4, 27, 24, 23, 22, 26, 28, 29, 30, -1}; int *field_num= fields_arr; ST_FIELD_INFO *field_info; Name_resolution_context *context= &thd->lex->select_lex.context; @@ -7038,6 +7045,8 @@ ST_FIELD_INFO columns_fields_info[]= 0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, OPEN_FRM_ONLY}, {"NUMERIC_SCALE", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONGLONG, 0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, OPEN_FRM_ONLY}, + {"DATETIME_PRECISION", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONGLONG, + 0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, OPEN_FULL_TABLE}, {"CHARACTER_SET_NAME", MY_CS_NAME_SIZE, MYSQL_TYPE_STRING, 0, 1, 0, OPEN_FRM_ONLY}, {"COLLATION_NAME", MY_CS_NAME_SIZE, MYSQL_TYPE_STRING, 0, 1, "Collation", @@ -7155,6 +7164,8 @@ ST_FIELD_INFO proc_fields_info[]= {"NUMERIC_PRECISION", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG, 0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, SKIP_OPEN_TABLE}, {"NUMERIC_SCALE", 21 , MYSQL_TYPE_LONG, 0, 1, 0, SKIP_OPEN_TABLE}, + {"DATETIME_PRECISION", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONGLONG, + 0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, SKIP_OPEN_TABLE}, {"CHARACTER_SET_NAME", 64, MYSQL_TYPE_STRING, 0, 1, 0, SKIP_OPEN_TABLE}, {"COLLATION_NAME", 64, MYSQL_TYPE_STRING, 0, 1, 0, SKIP_OPEN_TABLE}, {"DTD_IDENTIFIER", 65535, MYSQL_TYPE_STRING, 0, 1, 0, SKIP_OPEN_TABLE}, @@ -7566,6 +7577,8 @@ ST_FIELD_INFO parameters_fields_info[]= {"NUMERIC_PRECISION", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG, 0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, OPEN_FULL_TABLE}, {"NUMERIC_SCALE", 21 , MYSQL_TYPE_LONG, 0, 1, 0, OPEN_FULL_TABLE}, + {"DATETIME_PRECISION", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONGLONG, + 0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, OPEN_FULL_TABLE}, {"CHARACTER_SET_NAME", 64, MYSQL_TYPE_STRING, 0, 1, 0, OPEN_FULL_TABLE}, {"COLLATION_NAME", 64, MYSQL_TYPE_STRING, 0, 1, 0, OPEN_FULL_TABLE}, {"DTD_IDENTIFIER", 65535, MYSQL_TYPE_STRING, 0, 0, 0, OPEN_FULL_TABLE}, --===============0897035434== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/mayank.prasad@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: mayank.prasad@stripped\ # z1ouxzemyzs5jebe # target_branch: file:///home/mayank/mysql-tree/my_WL/5885/ # testament_sha1: 790f6f9aefb35d9b15000e7cc48548ad0313f213 # timestamp: 2011-05-31 20:00:26 +0530 # base_revision_id: jimmy.yang@stripped\ # 3x1f93rnspltp3h6 # # Begin bundle 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 kU4UJDgCVv8A --===============0897035434==--