Please take this survey to help us learn more about how you use third party tools. Your input is greatly appreciated!

Why does vsql can return all the records, while program using ODBC driver can't?

I do a simple test for Vertica:

ha=> insert into test(Name, City) values( 'Nan', 'Nanjing');   OUTPUT   --------        1  (1 row)    ha=> select node_name, wos_row_count, ros_row_count from projection_storage where anchor_table_name = 'test';     node_name   | wos_row_count | ros_row_count   ---------------+---------------+---------------   v_ha_node0001 |             1 |             3  (1 row)    ha=> select * from test;     ID   | Name |  City     --------+------+---------   250001 | Nan  | Nanjing   250002 | Nan  | Nanjing   250003 | Nan  | Nanjing   250004 | Nan  | Nanjing  (4 rows)  

The select operation displays OK (the data in WOS and ROSall display).

Then I write a simple program which uses ODBC:

ret = SQLExecDirect(stmt_handle, (SQLCHAR*)"select * from test", SQL_NTS);  if (!SQL_SUCCEEDED(ret))  {      printf("Execute statement failed\n");      goto ERR;  }    while ((ret = SQLFetch(stmt_handle)) == SQL_SUCCESS)  {      row_num++;  }    printf("Row number is %d\n", row_num);  

But the result is:

Row number is 3  

It doesn’t count the data in WOS.

And the DbVisualizer also displays 3 rows of data: 

Does it need some special option for using ODBC? Thanks very much in advance!


  • Hi!

    GOTO???  Very interesting.

    How row_num variable is initialized?  If its initialized to ZERO so you got correct answer - you counts rows starts from ZERO:
    0 => row 1 1 => row 2 2 => row 3 ... n => row [n-1] 
    >>> rows = [
    ... 'row 01',
    ... 'row 02',
    ... 'row 03',
    ... 'row 04']
    >>> for (row_index, row) in enumerate(rows):
    ... print 'Row index is: {:0>3}\t but row order is: {}'.format(row_index, row)
    Row index is: 000 but row order is: row 01
    Row index is: 001 but row order is: row 02
    Row index is: 002 but row order is: row 03
    Row index is: 003 but row order is: row 04
    About DBViz:
    Check against Vertica system tables what query DBViz sends to Vertica.

    System Tables:
    * sessions
    * query_requests

    Also you can find DBViz queries in a ODBC log file.

    Best, Idiot.

Leave a Comment

BoldItalicStrikethroughOrdered listUnordered list
Align leftAlign centerAlign rightToggle HTML viewToggle full pageToggle lights
Drop image/file

Can't find what you're looking for? Search the Vertica Documentation, Knowledge Base, or Blog for more information.