in reply to Re^2: MySQL Query Time DBI
in thread MySQL Query Time DBI
Illuminatus is correct - the time comes from the mysql command client.
Not that it helps the OP, but I was interested in finding out about this (and one of the key points of Open Source is that you CAN look at the source!)
(Based on MySQL 5.0.51a, OpenBSD port)
client/mysql.cc
(around line 2049)
(line 2137) mysql_end_timer(timer,time_buff);
(line 2170 - the "n rows in set" message)
So, what does mysql_end_timer put in time_buff?
(line 3726, same file, builds the "(" and ")", calling nice_time for the seconds display)
http://www.openbsd.org/cgi-bin/man.cgi?query=times&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html
BUT converting this into Perl is for another day!
Not that it helps the OP, but I was interested in finding out about this (and one of the key points of Open Source is that you CAN look at the source!)
(Based on MySQL 5.0.51a, OpenBSD port)
client/mysql.cc
(around line 2049)
(line 2092) timer=start_timer();static int com_go(String *buffer,char *line __attribute__((unused))) { char buff[200], time_buff[32], *pos;
(line 2137) mysql_end_timer(timer,time_buff);
(line 2170 - the "n rows in set" message)
(line 2195) strmov(pos, time_buff);sprintf(buff,"%ld %s in set", (long) mysql_num_rows(result), (long) mysql_num_rows(result) == 1 ? "row" : "rows");
So, what does mysql_end_timer put in time_buff?
(line 3726, same file, builds the "(" and ")", calling nice_time for the seconds display)
(line 3695 - builds the "n sec" part)static void end_timer(ulong start_time,char *buff) { nice_time((double) (start_timer() - start_time) / CLOCKS_PER_SEC,buff,1); } static void mysql_end_timer(ulong start_time,char *buff) { buff[0]=' '; buff[1]='('; end_timer(start_time,buff+2); strmov(strend(buff),")"); }
And, so, finally, what does start_timer() do? (line 3684)static void nice_time(double sec,char *buff,bool part_second) { ulong tmp; if (sec >= 3600.0*24) { tmp=(ulong) floor(sec/(3600.0*24)); sec-=3600.0*24*tmp; buff=int10_to_str((long) tmp, buff, 10); buff=strmov(buff,tmp > 1 ? " days " : " day "); } if (sec >= 3600.0) { tmp=(ulong) floor(sec/3600.0); sec-=3600.0*tmp; buff=int10_to_str((long) tmp, buff, 10); buff=strmov(buff,tmp > 1 ? " hours " : " hour "); } if (sec >= 60.0) { tmp=(ulong) floor(sec/60.0); sec-=60.0*tmp; buff=int10_to_str((long) tmp, buff, 10); buff=strmov(buff," min "); } if (part_second) sprintf(buff,"%.2f sec",sec); else sprintf(buff,"%d sec",(int) sec); }
Assuming we are not running on WIN/OS2/NETWARE, we can see what times does:static ulong start_timer(void) { #if defined( __WIN__) || defined( OS2) || defined(__NETWARE__) return clock(); #else struct tms tms_tmp; return times(&tms_tmp); #endif }
http://www.openbsd.org/cgi-bin/man.cgi?query=times&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html
BUT converting this into Perl is for another day!
In Section
Seekers of Perl Wisdom