>>>>> "Fred" == Fred Lindberg <[EMAIL PROTECTED]> writes: Fred> Monty: Fred> Here is fmt_ulong() from Dan Bernstein's library: Fred> #define FMT_ULONG 40 /* enough space to hold 2^128 - 1 in decimal, plus Fred> \0 */ Fred> unsigned int fmt_ulong(s,u) register char *s; register unsigned long u; Fred> { Fred> register unsigned int len; register unsigned long q; Fred> len = 1; q = u; Fred> while (q > 9) { ++len; q /= 10; } Fred> if (s) { Fred> s += len; Fred> do { *--s = '0' + (u % 10); u /= 10; } while(u); /* handles u == 0 Fred> */ Fred> } Fred> return len; Fred> } Fred> It makes the number as short as possible, but by fixing len and Fred> skipping, it's easy to convert to a function that fills YYYY-MM-DD Fred> HH:MM:DD or whatever is needed and circumvent sprintf() entirely. You Fred> are now using a probably quite general routine if sprintf() to fill the Fred> multiple %02d fields, each of which has an overhead in the same order Fred> of magnitude as the entire conversion. Hi! I thought about this a little and came up with the following: ------- String *Field_datetime::val_str(String *val_buffer,String *val_ptr) { val_buffer->alloc(field_length); val_buffer->length(field_length); ulonglong tmp; ulong part1,part2; char *pos; int part3; longlongget(tmp,ptr); /* Avoid problem with slow longlong aritmetic and sprintf */ part1=(ulong) (tmp/LL(1000000)); part2=(ulong) (tmp - (ulonglong) part1*LL(1000000)); pos=(char*) val_buffer->ptr()+19; *pos--=0; *pos--='0'+part2%10; part2/=10; *pos--='0'+part2%10; part3= (int) (part2 / 10); *pos--=':'; *pos--='0'+part3%10; part3/=10; *pos--='0'+part3%10; part3/=10; *pos--=':'; *pos--='0'+part3%10; part3/=10; *pos--='0'+part3; *pos--=' '; *pos--='0'+part1%10; part1/=10; *pos--='0'+part1%10; part1/=10; *pos--='-'; *pos--='0'+part1%10; part1/=10; *pos--='0'+part1%10; part3= (int) (part1/10); *pos--='-'; *pos--='0'+part3%10; part3/=10; *pos--='0'+part3%10; part3/=10; *pos--='0'+part3%10; part3/=10; *pos='0'+part3; return val_buffer; } -------- This is about 5 times faster than the code in MySQL 3.22.15 (This doesn't of course solve the general itoa() problem with longlong for which we still need a solution, but makes datetime handling much better) Regards, Monty ----------------------------------------------------------- Send a mail to [EMAIL PROTECTED] with unsubscribe mysql [EMAIL PROTECTED] in the body of the message to unsubscribe from this list.