[prev in list] [next in list] [prev in thread] [next in thread] 

List:       sqlite-users
Subject:    [sqlite] Value returned by sqlite3_column_bytes for strings
From:       chandan <chandan.babu () globaledgesoft ! com>
Date:       2009-07-03 6:41:36
Message-ID: 4A4DA550.9050505 () globaledgesoft ! com
[Download RAW message or body]

Hi all,
    Consider the following scenario,
    1. A table contains a column of type "text".
    2. The value of this column for the first row is say "linux".

If we execute the SQL statement: "select name from some_tbl where id = ?"
using sqlite3_step() API, then what is the value returned by 
sqlite3_column_bytes(). Does the count include the '\0' byte (count == 
6). If it does not include the '\0' byte the count should be 5.

I executed the following program:

/******************************************************************************/
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include "sqlite3.h"

const char *update_db = "update some_tbl set name = ? where id = ?";
const char *read_db = "select name from some_tbl where id = ?";

int32_t main(int argc, char *argv[])
{
    sqlite3_stmt *stmt;
    sqlite3 *db;
    int32_t num_bytes;
    char buf[100];
    int32_t ret;
   
    if (argc != 2) {
        fprintf(stderr, "Usage: %s <database name>\n", argv[0]);
        goto out1;
    }

    ret = sqlite3_initialize();
    if (ret != SQLITE_OK) {
        fprintf(stderr, "Unable to initialize db.\n");
        goto out1;
    }

    ret = sqlite3_open(argv[1], &db);
    if (ret != SQLITE_OK) {
        fprintf(stderr, "Unable to open database.\n");
        goto out2;
    }

    stmt = NULL;
    ret = sqlite3_prepare_v2(db, update_db, strlen(update_db) + 1,
                 &stmt, NULL);
    if (ret != SQLITE_OK) {
        fprintf(stderr, "sqlite3_prepare_v2: %s.\n",
            sqlite3_errmsg(db));
        goto out3;
    }

    ret = sqlite3_bind_text(stmt, 1, "linux", strlen("linux") + 1,
                SQLITE_TRANSIENT);
    if (ret != SQLITE_OK) {
        fprintf(stderr, "sqlite3_bind_text: %s.\n",
            sqlite3_errmsg(db));
        goto out4;
    }
   
    ret = sqlite3_bind_int64(stmt, 2, 1);
    if (ret != SQLITE_OK) {
        fprintf(stderr, "sqlite3_bind_int64: %s.\n",
            sqlite3_errmsg(db));
        goto out4;
    }

    ret = sqlite3_step(stmt);
    if (ret != SQLITE_DONE) {
        fprintf(stderr, "sqlite3_step: %s.\n",
            sqlite3_errmsg(db));
        goto out4;
    }

    ret = sqlite3_finalize(stmt);
    if (ret != SQLITE_OK) {
        fprintf(stderr, "sqlite3_finalize: %s.\n",
            sqlite3_errmsg(db));
    }

    stmt = NULL;
    ret = sqlite3_prepare_v2(db, read_db, strlen(read_db) + 1, &stmt,
                 NULL);
    if (ret != SQLITE_OK) {
        fprintf(stderr, "sqlite3_prepare_v2: %s.\n",
            sqlite3_errmsg(db));
        goto out3;
    }

    ret = sqlite3_bind_int64(stmt, 1, 1);
    if (ret != SQLITE_OK) {
        fprintf(stderr, "sqlite3_bind_int64: %s.\n",
            sqlite3_errmsg(db));
        goto out4;
    }

    ret = sqlite3_step(stmt);
    if (ret != SQLITE_ROW) {
        fprintf(stderr, "sqlite3_step: %s.\n",
            sqlite3_errmsg(db));
        goto out4;
    }

    num_bytes = sqlite3_column_bytes(stmt, 0);
    printf("*** num_bytes = %d ***\n", num_bytes);

    memcpy(buf, sqlite3_column_text(stmt, 0), num_bytes);
    printf("*** buf = %s ***\n", buf);
   
    exit(0);

 out4:
    ret = sqlite3_finalize(stmt);
 out3:
    ret = sqlite3_close(db);
 out2:
    ret = sqlite3_shutdown();
 out1:
    exit(1);
}
/*****************************************************************************/


The output shows that sqlite3_column_bytes() returns a count value that 
includes the '\0'. Please correct me if I am arriving at the wrong 
conclusion.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic