Monday, August 26, 2013

Tenth week report - Navigation panel and current table

During the tenth week of coding I implemented the feature request '#1398 - Navigation panel and current table'. Even though I personally loved the navigation tree improvement it seems that people find it not so user friendly due to some of its shortcomings. One of them is that it does not indicate the current database or table/view when navigation was done without using it.

When implementing the feature request I used PMA_commonParams.get() function which makes the current database and table available for JavaScript level. With these variables the navigation decides where the user had navigated and open the database or table/view appropriately.

What this feature request does is,
1. When  the user is in the database level, current database is highlighted in the navigation panel. If the database is grouped under a database group the groups is opened to highlight the database.
2. When the user is in the table/view level, current table/view is highlighted in the navigation panel. Following situations are handled here.
    a. Tables/views could be directly under the database or inside 'Tables'/'Views' containers.
    b. Tables/views could be grouped based on their names.
    c. A combination of the above two.


The last two feature requests I planned to implement have already been implemented and I plan to write to the developers' mailing list to get approval for some feature requests I'm going to implement in place of them.

Sunday, August 18, 2013

Ninth week report - 'Single Row Editor: Value column too small' & 'Change icon in the left pane to based on the link target'

During the ninth week of coding I went on to implement two feature requests, namely
1. Single Row Editor: Value column too small and
2. Change icon in the left pane to based on the link target

The first one requires that a text area is provided to edit binary values when the size of the value exceeds the size that can easily be edited with an input field. The seconds feature request was to change the icon shown before the table name be adjusted based on the target of the icon. By default clicking on the icon takes the user to table structure page and the icon should be the 'structure' icon to represent that. Similarly the icon needs to be changed to reflect the link target if it is configured to something else.

Implementation wise both these feature requests were much easier than I anticipated and I was left with extra time to work on something else. Hence I started working on 'Navigation panel and current table' which was originally planned for the next week and seems to take more time than I anticipated earlier. During the next week I will work on completing it.

Saturday, August 10, 2013

Eighth week report - Unit testing ctd. and fractional seconds in time

During the eighth week of GSoC I continued to add unit tests for the new code written in the first half of the program. Specifically I added unit tests for navigation item hiding feature implemented quite closer to the mid term evaluation. Writing unit test cases was not as challenging as the previous week due to the experienced gain writing unit tests.

During the same week I implemented the feature request that requested phpMyAdmin extend its support for time, datetime and timestamp data types with fractional seconds. The major problem for implementation was jQuery timepicker not supporting micro seconds. I looked into this problem earlier and had submitted a solution to jQuery timepicker project which got integrated. So I updated the plugin to its latest stable version and went on to add fractional seconds for time data types.

Sunday, August 4, 2013

Seventh week report - Unit testing and documentation

Undoubtedly this was the most challenging week of GSoC I've had so far. This was mainly due to unit testing and I added tests for the functionality implemented by me during the first half of GSoC. I already had some experiences in unit testing using PHPUnit. However this was the first time I used mocking. I was familiar with the concept and went through a couple of online resources to make myself familiar with mocking in PHPUnit. The best resource was the existing phpMyAdmin tests and it had quite a number of instances where resources such as database connection were mocked.

Mocking in PHPUnit allows setting expectations and these expectations can be set based on the method being invoked and the index of method invocation.
For ex:
        $dbi->expects($this->at(0))
            ->method('fetchAssoc')
            ->withAnyParameters()
            ->will($this->returnValue(false));
I interpreted the above as setting expectation for the first invocation of 'fetchAssoc' and spend a good amount of time trying to figure out why my tests fail. After a bit of reading online I figured out that the index is not related to the method, but relates to the number of time 'any' method is invoked on the mocked object. There seemed to quite a lot of people who had interpreted it in that way; see this and this.

I did most of the documentation while implementing the features, such as documenting new configurations. So documentation wise what I did during this week was porting these updates from the code to the phpMyAdmin wiki.