We were looking at the ways we can optimize our application. Our app does a 
simple sqlite3_exec and sends the callback as below. The data is just a 
map<string, vector<string> >

int sqlite3TableCallback(void* data, int ncols, char** values, char** headers)

            map<string, vector<string> >& table = *(( map<string, 
vector<string> >*) data);
            for (int i = 0; i < ncols; i++)
            return 0;

Here, we wanted to optimize the string construction of string in 
table.Data[headers[i]]. We were happy to notice that the headers were pointing 
to the same address, hence we are planning to enhance the callback data so that 
it can track map<char*, string>, and then in the table.Data[headers[i]] we can 
pass reference to the string preventing its construction and destruction. 
Agreed, there will be another look-up in the map, for char* to string.

Well, the bottom line, is it safe to assume that char** headers will be 
pointing to the same address through out the query (i.e. each time callback is 
called for a matching row).


Prakash Bande
Altair Engg. Inc.
Troy MI
Ph: 248-614-2400 ext 489
Cell: 248-404-0292

sqlite-users mailing list

Reply via email to