Hello, Sergie!I tried to explore the source code from mi_create.c,ha_myisam.cc,sql/sql_table.cc,include/myisam.h,.and some other files.The main task is to create MI_UNIQUEDEF "uniques" for long unique constraints.We have to consider all the cases where we need to create MI_UNIQUEDEF instead of MI_KEYDEF.It will include queries likecreate table table1 (blob_column blob,unique(blob_column) );create table table1 (a int,blob_column blob,unique(a,blob_column) );create table table1 (a int,blob_column1 blob,blob_column2 blob,unique(blob_column1(300),blob_column2) );(key with multiple blob columns and one of the blob column specified with prefix length).I think we have to create MI_UNIQUEDEF if any one of the columns in a key is a blob field without prefix length.In sql/sql_table, mysql_prepare_create_table is the function which prepares the table and key structures for table creation in mi_create. It generates an error if any one of the blob fields in a key is specified without length.Currently, this task is limited to MyISAM, so if any other storage engine is selected, we have to generate the same error in mysql_prepare_create_table.In storage/myisam/ha_myisam.cc, table2myisam is a function which allocates and initializes myisam key and column definitions.The current function prototype of table2myisam istable2myisam(TABLE *table_arg, MI_KEYDEF **keydef_out, MI_COLUMNDEF **recinfo_out, uint records_out)We have to change it totable2myisam(TABLE *table_arg,MI_KEYDEF **keydef_out,MI_UNIQUEDEF ** uniquedef_out,MI_COLUMNDEF **recinfo_out,uint records_out)table2myisam initializes all the key definitions from table_arg->keyinfo.So we can set a new flag (say uniquedef) in a keyinfo struct in mysql_prepare_create_table if any one of the key_part consists of blob field without prefix length.Later we can check the flag in table2myisam to see if we want to create MI_KEYDEF or MI_UNIQUEDEF.Thanks,Shubham.On 5 March 2016 at 03:52, Sergei Golubchik <serg@mariadb.org> wrote:Hi, Shubham!
On Mar 03, Shubham Barai wrote:
>
> I am interested in the project "Unique indexes for blobs".I have read the
> description of the project given on the link
> https://jira.mariadb.org/browse/MDEV-371.
Great!
> I want to know what exactly is the task for this project.Any help
> would be greatly appreciated
See storage/myisam/mi_create.c. You see that a myisam table can have
keys (defined in MI_KEYDEF structure) and so-called "uniques" (defined
by MI_UNIQUEDEF).
Keys have length limitation, keys can be unique (HA_NOSAME flag) or not
unique.
"uniques" have no length limitation.
When one creates a unique key from SQL:
CREATE TABLE ... (... UNIQUE KEY (...) ... )
this will always create a key (MI_KEYDEF) in a MyISAM table. That's why
unique constraints in MyISAM have a limited length.
This task is about creating MI_UNIQUEDEF "uniques" instead of MI_KEYDEF
"keys" for long unique constraints.
Regards,
Sergei
Chief Architect MariaDB
and security@mariadb.org
_______________________________________________
Mailing list: https://launchpad.net/~maria-developers
Post to : maria-developers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~maria-developers
More help : https://help.launchpad.net/ListHelp