Thank you all for your replies! Good to hear that this actually is sort of a 
sane behaviour. I think I wasn't fully aware of the fact that the primary key 
and the rowid column actually are *exactly* the same - it does make sense that 
way though.

Thankfully I'm not relying on the column names but was working on a SQLite GUI 
and wondered why I got the same column name twice after executing that SELECT 
statement. It is good to know, however, better not to start relying on the 
column names at all; so this is definitely a valuable piece of advice I got 
here :)

 Martin



On Thursday 03 July 2014 23:22:46 Martin Kleusberg wrote:
> Hi everybody,
> 
> I've encountered some odd behaviour when using the sqlite3_column_name
> function. Here's my attempt to build a minimal example.
> 
> Part 1: The database. Note that the table is not a 'without rowid' table and
> has a primary key:
> 
> $ sqlite3 test.db
> create table test(id integer primary key, bla integer);
> insert into test(bla) values(5);
> .quit
> 
> Part 2: A C program using the sqlite3_column_name function to determine the
> column names of the result set of a statement:
> 
> #include <stdio.h>
> #include "sqlite3.h"
> 
> int main()
> {
>       sqlite3* db;
>       if(sqlite3_open_v2("test.db", &db, SQLITE_OPEN_READONLY, NULL))
>               return 1;
> 
>       sqlite3_stmt* stmt;
>       int status = sqlite3_prepare_v2(db,
>                                                               "SELECT rowid,* 
> FROM test",
>                                                               -1,
>                                                               &stmt,
>                                                               NULL);
>       if(status == SQLITE_OK)
>       {
>               status = sqlite3_step(stmt);
>               int columns = sqlite3_data_count(stmt);
>               int i;
>               for(i=0;i<columns;i++)
>                       printf("column #%d: %s\n", i+1, 
> sqlite3_column_name(stmt, i));
>       } else {
>               return 2;
>       }
>       sqlite3_finalize(stmt);
> 
>       sqlite3_close(db);
>       return 0;
> }
> 
> The output of this program is:
> column #1: id
> column #2: id
> column #3: bla
> 
> However, I'd have expected the following:
> column #1: rowid
> column #2: id
> column #3: bla
> 
> I've tested this using the latest version of SQLite, i.e. 3.8.5, and did a
> (admittedly very quick) search but couldn't find anything.
> 
> If there's any required information I didn't provide or any sane explanation
> please let me know :)
> 
> Cheers
> Martin
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to