Its same as what http://blog.olindata.com/2009/02/using-the-google-graph-api-with-mysql-stored-functions/ had posted, I’ve just updated a little. And there are no smart quotes here. So u can copy paste 😉
DELIMITER $$ DROP FUNCTION IF EXISTS `test`.`FNC_GOOGRAPH_DB_SIZE`$$ CREATE FUNCTION `test`.`FNC_GOOGRAPH_DB_SIZE` ( p_chart_type CHAR, p_height INT, p_width INT) RETURNS varchar(3000) CHARSET latin1 READS SQL DATA BEGIN /* Author: Walter Heck - OlinData */ /* Date: 20090216 */ /* Note: After an idea by Alex Gorbachev - Pythian */ /* http://www.pythian.com/blogs/1490/google-charts-for-dba-tablespaces-allocation */ /* variable declaration */ DECLARE v_done BOOLEAN default false; DECLARE v_url varchar(3000); DECLARE v_schema_name varchar(3000); DECLARE v_data_length_sum int; DECLARE v_data_length_total int; DECLARE v_legend_labels varchar(3000); DECLARE v_chart_labels varchar(3000); DECLARE v_chart_data varchar(3000); /* Cursor declaration */ DECLARE c_schema_sizes cursor for select t.table_schema, round(sum(t.data_length + t.index_length) / 1024 / 1024) as data_length_schema from information_schema.tables t group by t.table_schema order by t.table_schema; /* Handler declaration */ DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = true; /* Initialize the variables */ SET v_legend_labels = ''; SET v_chart_labels = ''; SET v_chart_data = ''; /* Get the total data length + index_length for all tables */ select round(sum(t.data_length + t.index_length) / 1024 / 1024) as data_length_total into v_data_length_total from information_schema.tables t; /* Open the cursor */ OPEN c_schema_sizes; /* Loop through the cursor */ get_data: LOOP /* Fetch the next row of data into our variables */ FETCH c_schema_sizes INTO v_schema_name, v_data_length_sum; /* if there is no more data, v_done will be true */ IF v_done THEN /* Exit the loop */ LEAVE get_data; END IF; /* Add the schema name to the labels for the legend */ IF v_legend_labels = '' THEN SET v_legend_labels = v_schema_name; ELSE SET v_legend_labels = concat(v_legend_labels, '|', v_schema_name); END IF; /* Add the total size of the schema to the labels */ IF v_chart_labels = '' THEN SET v_chart_labels = v_data_length_sum; ELSE SET v_chart_labels = concat(v_chart_labels, '|', v_data_length_sum); END IF; /* Get the percentage of the total size as the graph's data */ IF v_chart_data = '' THEN SET v_chart_data = ROUND(v_data_length_sum / v_data_length_total, 2) * 100; ELSE SET v_chart_data = concat(v_chart_data, ',', ROUND(v_data_length_sum / v_data_length_total, 2) * 100); END IF; END LOOP get_data; /* Close the cursor */ CLOSE c_schema_sizes; /* Build up the google graph url */ SET v_url = 'http://chart.apis.google.com/chart?'; SET v_url = CONCAT(v_url, 'cht=', p_chart_type); SET v_url = CONCAT(v_url, '&chs=', p_width , 'x', p_height); SET v_url = CONCAT(v_url, '&chtt=Database Sizes (MB)'); SET v_url = CONCAT(v_url, '&chl=', v_chart_labels); SET v_url = CONCAT(v_url, '&chd=t:', v_chart_data); SET v_url = CONCAT(v_url, '&chdl=', v_legend_labels); /* return the url as the function's result */ RETURN v_url; END$$ DELIMITER ;