WEEK 6 : JUNE 20th TO JUNE 27th 2016
This week is the Midterm evaluation week for my project. I intend to continue working on the call back functions ( xxx_index(…) ) for the index format and while communicating the work I have done so far. I modified dynamic_column_create_many_internal_fmt(…) to write mariadb_dyncol_create_many_index(…).
After, I modified mariadb_dyncol_list_named(…) to accommodate the index format when listing columns in the packed string. Finally, I introduced the format parameter in the dynamic_column_exists_internal(…) to check existence of the column in the packed string using a particular format at a given time. Please check my code on github on the functions written and accompanying unit tests .
WEEK 1: MAY 23rd TO MAY 29th 2016
During this week, I started studying the include/ma_dyncol.h and libmariadb/ma_dyncol.c files as my mentors advised.
WEEK 2 & 3 : MAY 30th TO JUNE 12th 2016
After a period of rigourously studying include/ma_dyncol.h and libmariadb/ma_dyncol.c and communications with my Mentors, I have finally conceived a new format ( Index Format ) which will help build a more encompassing library for dynamic columns. The Index Format will look like this;
* Fixed header part
1 byte flags:
0,1 bits – <offset size> – 2
2,3 bit – 11 (means new index format)
4-7 bits – 0
2 bytes column counter
* Column directory sorted by column number, each entry contains:
2 bytes column number
<offset size> bytes (2-5) combined offset from beginning of
the data segment + 4 bit type
* Data of above columns size of data and length depend on type
Bits 2 and 3 in the Flag Byte will hold 1 indicative of the fact that dynamic columns are being stored using the Index Format (not the others). The offset bytes is between 2 to 5 Bytes just as in the case of the String format. Also, 4 bits are used to store type information so that 16 ( =2^4 ) different types can be accommodated by this Index Format.
In order to check how the preceeding Numeric and String formats were defined, please check the opening comments of ma_dyncol.c
Now that my Mentor has approved this data structure for the upcoming Index Format, I intend to dive deep into implementation/coding this coming week.
WEEK 4 & 5 : JUNE 13th TO JUNE 19th 2016
- Commented the Index format data structure into mysys/ma_dyncol.c. The call back functions for the Index format will look thus xxx_index(…)
- Described the Index format in fmt_data array of service functions as shown below,
- Wrote sort function for plan for index format viz plan_sort_index(…)
- Wrote function to compute name size for index format viz name_size_index(…)
- Comparator function for references on column numbers for qsort viz column_sort_index(…)
- Check limit function for index format viz check_limit_index(…)
- Write index format static header part viz set_fixed_header_index(…)
- Function to read type and offset information for index format viz type_and_offset_read_store(…)
- Write index format header entry viz put_header_entry_index(…)
- Function to store type and offset information for index format viz type_and_offset_store_index(…)
- Function to compute the size of offset bytes for dynamic column under index format viz dynamic_column_offset_bytes_index(…)
- Function to read offset and type information from index entry in index format viz type_and_offset_read_index(…)
- Right now I did run make successfully and BUILD_STATUS is OK
Due to the amount of time it takes to build the server code, my mentor Georg Richter suggested I base my work on the connector_c_2.2 branch of the C API which also has an implementation for dynamic columns.
Getting and Building the Code..
This summer, I will be working with the MariaDB foundation under the umbrella of Google Summer of Code to provide some enhancements to MariaDB Dynamic columns. I will be mentored by Byelkin Sanja and George Ritcher. During Community Bonding, I got to build the MariaDB source code on OS X then I went on to study mysys/ma_dyncol.c
include/ma_dyncol.h to understand the implementation of dynamic column types.
Next thing will be to discuss with my mentors on our work plan and how we will implement the new dynamic column format. I have created a Github branch called CONC-125 in which I will be pushing my code. I will update this blog every week to report on our progress with this project.