"D. Richard Hipp" <[EMAIL PROTECTED]> writes:

> [EMAIL PROTECTED] wrote:
>> "D. Richard Hipp" <[EMAIL PROTECTED]> writes:
>>> The show_datatypes PRAGMA is now locked on. Is this going to break
>>> anybody's code?
>> Yes, I think so, if I understand this change correctly.  I don't use any
>> pragmas at all, and I always get the first row of my data beginning in the
>> second set of element of the returned values array (i.e. in the second element
>> if only one column is requested).  The first element is the column name, and
>> I've never gotten datatypes.
>
> If you have (for example) 3 columns in the result set then
>
>     columnName[0] = Name of the first column.
>     columnName[1] = Name of the second column.
>     columnName[2] = Name of the third column.
>
> This has been and will continue to be unchanged.  The change
> in the pipeline for 2.8.13 is in the values for columnName[3]
> and following.  Prior to 2.8.13, those values (if they even
> existed) would have been NULL.  Now they contain information
> about datatypes.  As long as you have never accessed
> columnName[3] or columnName[4], or any other columnName[]
> value other than 0 through 2 you should be fine.
>
> The details of the previous paragraph are for a 3-column
> result set.  Make appropriate adjustments if your result
> set has a different number of columns.
>
> Please look again and tell me if you think this will break
> your code.

The sqlite_exec() function to which you are proposing making this change has
two separate pointers to arrays in its callback: "argv" and "columnNames".
The functions that I use, sqlite_get_table_*() have only one pointer to
pointer to array value, "result", which contains the column names in the first
nCol array elements.  I don't know if your change would put the datatypes into
the next nCol array elements, but if it would, that would break my code.

Here's an example of how I access the data from a query.  Maybe you can tell
me if your change would break it:

    int             numRows;
    int             numColumns;
    char *          pError;
    char **         ppValues;
    struct QueryData
    {
        char *          a;
        char *          b;
        char *          c;
    } *             pQueryData;

    ret = sqlite_get_table_printf(hDB,
                                  "SELECT a, b, c FROM the_table;",
                                  &ppValues,
                                  &numRows,
                                  &numColumns,
                                  &pError);

    if (numRows > 0)
    {
        /* View a row in structure format */
        pQueryData = ((struct QueryData *) ppValues);

        /* Increment past the column names */
        ++pQueryData;

        /* Print each of the values */
        while (numRows-- > 0)
        {
            printf("a=%s b=%s c=%s\n",
                   pQueryData->a, pQueryData->b, pQueryData->c);
        }
    }

Derrell

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to