Changeset: d48024361f64 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d48024361f64
Modified Files:
        clients/mapilib/mapi.c
Branch: protocol
Log Message:

performance tweaks for string conversions


diffs (67 lines):

diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -3996,8 +3996,29 @@ static char* mapi_convert_varchar(struct
        return col->buffer_ptr;
 }
 
+static char* itoa(int i, char b[]){
+    char const digit[] = "0123456789";
+    char* p = b;
+    if(i<0){
+        *p++ = '-';
+        i *= -1;
+    }
+    int shifter = i;
+    do{ //Move to where representation ends
+        ++p;
+        shifter = shifter/10;
+    }while(shifter);
+    *p = '\0';
+    do{ //Move back, inserting digits as u go
+        *--p = digit[i%10];
+        i = i/10;
+    }while(i);
+    return b;
+}
+
 static char* mapi_convert_int(struct MapiColumn *col) {
-       sprintf(col->write_buf, "%d", *((int*) col->buffer_ptr));
+       //sprintf(col->write_buf, "%d", *((int*) col->buffer_ptr));
+       itoa(*((int*) col->buffer_ptr), col->write_buf);
        return (char*) col->write_buf;
 }
 
@@ -4017,7 +4038,8 @@ static char* mapi_convert_tinyint(struct
 }
 
 static char* mapi_convert_double(struct MapiColumn *col) {
-       sprintf(col->write_buf, "%g", *((double*) col->buffer_ptr));
+       //sprintf(col->write_buf, "%g", *((double*) col->buffer_ptr));
+       gcvt(*((double*) col->buffer_ptr), 2, col->write_buf);
        return (char*) col->write_buf;
 }
 
@@ -4101,8 +4123,20 @@ mapi_convert_date(struct MapiColumn *col
                        }
                day -= CUMDAYS[month - 1];
        }
-
-       sprintf(col->write_buf, "%04d-%02d-%02d", year, month, day);
+       // YYYY-MM-DD
+       col->write_buf[0] = (year/1000) + 48;
+       col->write_buf[1] = ((year/100) % 10) + 48;
+       col->write_buf[2] = ((year/10) % 10) + 48;
+       col->write_buf[3] = (year % 10) + 48;
+       col->write_buf[4] = '-';
+       col->write_buf[5] = (month/10) + 48;
+       col->write_buf[6] = (month % 10) + 48;
+       col->write_buf[7] = '-';
+       col->write_buf[8] = (day/10) + 48;
+       col->write_buf[9] = (day % 10) + 48;
+       col->write_buf[10] = 0;
+
+       //sprintf(col->write_buf, "%04d-%02d-%02d", year, month, day);
 
        return col->write_buf;
 }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to