Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 8.4.3 |  CUBRID 9.0.0 | 

CCI Programming

Writing CCI Applications

The applications using CCI interact with CUBRID in the process of connecting to CAS, preparing queries, executing queries, handling response, and disconnecting. In each process, CCI communicates with applications through connection handle, query handle, and response handle.

The default value of auto-commit mode can be configured by using CCI_DEFAULT_AUTOCOMMIT (which is a broker parameter). If it is omitted, the default value is set to ON. To change auto-commit mode within applications, you should use the cci_set_autocommit() function. If auto-commit mode is OFF, you should explicitly commit or roll back transactions by using the cci_end_tran() function.

General process for writing applications is as follows. For using the prepared statement, additional step binding data to a variable is required; the examples 1 and 2 show the way to implement this.

Example 1

//Example to execute a simple query

#include <stdio.h>

#include "cas_cci.h"  

#define BUFSIZE  (1024)

 

int

main (void)

{

  int con = 0, req = 0, col_count = 0, i, ind;

  int error;

  char *data;

  T_CCI_ERROR cci_error;

  T_CCI_COL_INFO *col_info;

  T_CCI_CUBRID_STMT stmt_type;

  char *query = "select * from code";

 

//getting a connection handle for a connection with a server

  con = cci_connect ("localhost", 33000, "demodb", "dba", "");

  if (con < 0)

    {

      printf ("cannot connect to database ");

      return 1;

    }

 

//preparing the SQL statement

  req = cci_prepare (con, query, 0, &cci_error);

  if (req < 0)

    {

      printf ("prepare error: %d, %s ", cci_error.err_code,

              cci_error.err_msg);

      goto handle_error;

    }

 

//getting column information when the prepared statement is the SELECT query

  col_info = cci_get_result_info (req, &stmt_type, &col_count);

  if (col_info == NULL)

    {

      printf ("get_result_info error: %d, %s ", cci_error.err_code,

              cci_error.err_msg);

      goto handle_error;

    }

 

//Executing the prepared SQL statement

  error = cci_execute (req, 0, 0, &cci_error);

  if (error < 0)

    {

      printf ("execute error: %d, %s ", cci_error.err_code,

              cci_error.err_msg);

      goto handle_error;

    }

  while (1)

    {

 

//Moving the cursor to access a specific tuple of results

      error = cci_cursor (req, 1, CCI_CURSOR_CURRENT, &cci_error);

      if (error == CCI_ER_NO_MORE_DATA)

        {

          break;

        }

      if (error < 0)

        {

          printf ("cursor error: %d, %s ", cci_error.err_code,

                  cci_error.err_msg);

          goto handle_error;

        }

 

//Fetching the query result into a client buffer

      error = cci_fetch (req, &cci_error);

      if (error < 0)

        {

          printf ("fetch error: %d, %s ", cci_error.err_code,

                  cci_error.err_msg);

          goto handle_error;

        }

      for (i = 1; i <= col_count; i++)

        {

 

//Getting data from the fetched result

          error = cci_get_data (req, i, CCI_A_TYPE_STR, &data, &ind);

          if (error < 0)

            {

              printf ("get_data error: %d, %d ", error, i);

              goto handle_error;

            }

          printf ("%s |", data);

        }

      printf (" ");

    }

 

//Closing the request handle

  error = cci_close_req_handle (req);

  if (error < 0)

    {

      printf ("close_req_handle error: %d, %s ", cci_error.err_code,

              cci_error.err_msg);

      goto handle_error;

    }

 

//Disconnecting with the server

  error = cci_disconnect (con, &cci_error);

  if (error < 0)

    {

      printf ("error: %d, %s ", cci_error.err_code, cci_error.err_msg);

      goto handle_error;

    }

 

  return 0;

 

handle_error:

  if (req > 0)

    cci_close_req_handle (req);

  if (con > 0)

    cci_disconnect (con, &cci_error);

 

  return 1;

}

Example 2

//Example to execute a query with a bind variable

 

char *query = "select * from nation where name = ?";

  char namebuf[128];

 

//getting a connection handle for a connection with a server

  con = cci_connect ("localhost", 33000, "demodb", "dba", "");

  if (con < 0)

    {

      printf ("cannot connect to database ");

      return 1;

    }

 

//preparing the SQL statement

  req = cci_prepare (con, query, 0, &cci_error);

  if (req < 0)

    {

      printf ("prepare error: %d, %s ", cci_error.err_code,

              cci_error.err_msg);

      goto handle_error;

    }

 

//Binding date into a value

  strcpy (namebuf, "Korea");

  error =

    cci_bind_param (req, 1, CCI_A_TYPE_STR, &namebuf, CCI_U_TYPE_STRING,

                    CCI_BIND_PTR);

  if (error < 0)

    {

      printf ("bind_param error: %d ", error);

      goto handle_error;

    }

Example 3

#include <stdio.h>

#include "cas_cci.h"

 

//Example to use connection/statement pool in CCI

int main ()

{

  T_CCI_PROPERTIES *ps = NULL;

  T_CCI_DATASOURCE *ds = NULL;

  T_CCI_ERROR err;

  T_CCI_CONN cons[20];

  int rc = 1, i;

 

  ps = cci_property_create ();

  if (ps == NULL)

    {

      fprintf (stderr, "Could not create T_CCI_PROPERTIES. ");

      rc = 0;

      goto cci_pool_end;

    }

 

  cci_property_set (ps, "user", "dba");

  cci_property_set (ps, "url", "cci:cubrid:localhost:33000:demodb:::");

  cci_property_set (ps, "pool_size", "10");

  cci_property_set (ps, "max_wait", "1200");

  cci_property_set (ps, "pool_prepared_statement", "true");

  cci_property_set (ps, "default_autocommit", "false");

  cci_property_set (ps, "default_isolation", "TRAN_REP_CLASS_UNCOMMIT_INSTANCE");

  cci_property_set (ps, "default_lock_timeout", "10");

  cci_property_set (ps, "login_timeout", "300000");

  cci_property_set (ps, "query_timeout", "3000");

 

  ds = cci_datasource_create (ps, &err);

  if (ds == NULL)

    {

      fprintf (stderr, "Could not create T_CCI_DATASOURCE. ");

      fprintf (stderr, "E[%d,%s] ", err.err_code, err.err_msg);

      rc = 0;

      goto cci_pool_end;

    }

 

  for (i = 0; i < 3; i++)

    {

      cons[i] = cci_datasource_borrow (ds, &err);

      if (cons[i] < 0)

        {

          fprintf (stderr,

                   "Could not borrow a connection from the data source. ");

          fprintf (stderr, "E[%d,%s] ", err.err_code, err.err_msg);

          continue;

        }

      // put working code here.

      cci_work (cons[i]);

    }

 

  sleep (1);

 

  for (i = 0; i < 3; i++)

    {

      if (cons[i] < 0)

        {

          continue;

        }

      cci_datasource_release (ds, cons[i], &err);

    }

cci_pool_end:

  cci_property_destroy (ps);

  cci_datasource_destroy (ds);

 

  return 0;

}

 

// working code

int cci_work (T_CCI_CONN con)

{

  T_CCI_ERROR err;

  char sql[4096];

  int req, res, error, ind;

  int data;

 

  cci_set_autocommit (con, CCI_AUTOCOMMIT_TRUE);

  cci_set_lock_timeout (con, 100, &err);

  cci_set_isolation_level (con, TRAN_REP_CLASS_COMMIT_INSTANCE, &err);

 

  error = 0;

  snprintf (sql, 4096, "SELECT host_year FROM record WHERE athlete_code=11744");

  req = cci_prepare (con, sql, 0, &err);

  if (req < 0)

    {

      printf ("prepare error: %d, %s ", err.err_code, err.err_msg);

      return error;

    }

 

  res = cci_execute (req, 0, 0, &err);

  if (res < 0)

    {

      printf ("execute error: %d, %s ", err.err_code, err.err_msg);

      goto cci_work_end;

    }

 

  while (1)

    {

      error = cci_cursor (req, 1, CCI_CURSOR_CURRENT, &err);

      if (error == CCI_ER_NO_MORE_DATA)

        {

          break;

        }

      if (error < 0)

        {

          printf ("cursor error: %d, %s ", err.err_code, err.err_msg);

          goto cci_work_end;

        }

 

      error = cci_fetch (req, &err);

      if (error < 0)

        {

          printf ("fetch error: %d, %s ", err.err_code, err.err_msg);

          goto cci_work_end;

        }

 

      error = cci_get_data (req, 1, CCI_A_TYPE_INT, &data, &ind);

      if (error < 0)

        {

          printf ("get data error: %d ", error);

          goto cci_work_end;

        }

      printf ("%d ", data);

    }

 

  error = 1;

cci_work_end:

  cci_close_req_handle (req);

  return error;

}

Remark
  • The database connection in thread-based programming must be used independently each other.
Configuring Library

Once you have written applications using CCI, you should decide, according to its features, whether to execute CCI as static or dynamic link before you build it. See the table in CCI Overview to decide which library will be used.

The following is an example of Makefile, which makes a link by using the dynamic library on UNIX/Linux.

CC=gcc

CFLAGS = -g -Wall -I. -I$CUBRID/include

LDFLAGS = -L$CUBRID/lib -lcascci -lnsl

TEST_OBJS = test.o

EXES = test

all: $(EXES)

test: $(TEST_OBJS)

 $(CC) -o $@ $(TEST_OBJS) $(LDFLAGS)

The following image shows configuration to use static library on Windows.

image029.png

Using BLOB/CLOB
Storing LOB Data

You can create LOB data file and bind the data by using the functions below in CCI applications.

Example

int con = 0; /* connection handle */

int req = 0; /* request handle */

int res;

int n_executed;

int i;

T_CCI_ERROR error;

T_CCI_BLOB blob = NULL;

char data[1024] = "bulabula";

 

con = cci_connect ("localhost", 33000, "tdb", "PUBLIC", "");

if (con < 0) {

  goto handle_error;

}

req = cci_prepare (con, "insert into doc (doc_id, content) values (?,?)", 0, &error);

if (req< 0)

{

goto handle_error;

}

 

res = cci_bind_param (req, 1 /* binding index*/, CCI_A_TYPE_STR, "doc-10", CCI_U_TYPE_STRING, CCI_BIND_PTR);

 

/* Creating an empty LOB data file */

res = cci_blob_new (con, &blob, &error);

res = cci_blob_write (con, blob, 0 /* start position */, 1024 /* length */, data, &error);

 

/* Binding BLOB data */

res = cci_bind_param (req, 2 /* binding index*/, CCI_A_TYPE_BLOB, (void *)blob, CCI_U_TYPE_BLOB, CCI_BIND_PTR);

 

n_executed = cci_execute (req, 0, 0, &error);

if (n_executed < 0)

{

  goto handle_error;

}

 

/* Commit */

if (cci_end_tran(con, CCI_TRAN_COMMIT, &error) < 0)

{

goto handle_error;

}

 

/* Memory free */

  cci_blob_free(blob);

return 0;

 

handle_error:

if (blob != NULL)

{

cci_blob_free(blob);

}

if (req > 0)

{

  cci_close_req_handle (req);

}

if (con > 0)

{

  cci_disconnect(con, &error);

}

return -1;

Retrieving LOB Data

You can retrieve LOB data by using the following functions in CCI applications. Note that if you enter data in the LOB type column, the actual LOB data is stored in the file located in external storage and Locator value is stored in the LOB type column. Thus, to retrieve the LOB data stored in the file, you should call the cci_blob_read() function but the cci_get_data() function.

  • Retrieving meata data (Locator) in the the LOB type column (related function: cci_get_data())
  • Retrieving the LOB data (related function: cci_blob_read())
  • Freeing memory for the LOB struct: (related function: cci_blob_free())

Example

int con = 0; /* connection handle */

int req = 0; /* request handle */

int ind; /* NULL indicator, 0 if not NULL, -1 if NULL*/

int res;

int i;

T_CCI_ERROR error;

T_CCI_BLOB blob;

char buffer[1024];

 

con = cci_connect ("localhost", 33000, "image_db", "PUBLIC", "");

if (con < 0)

{

  goto handle_error;

}

req = cci_prepare (con, "select content from doc_t", 0 /*flag*/, &error);

if (req< 0)

{

  goto handle_error;

}

 

res = cci_execute (req, 0/*flag*/, 0/*max_col_size*/, &error);

res = cci_fetch_size (req, 100 /* fetch size */);

 

while (1) {

  res = cci_cursor (req, 1/* offset */, CCI_CURSOR_CURRENT/* cursor position */, &error);

  if (res == CCI_ER_NO_MORE_DATA)

  {

    break;

  }

  res = cci_fetch (req, &error);

 

  /* Fetching CLOB Locator */

  res = cci_get_data (req, 1 /* colume index */, CCI_A_TYPE_BLOB,

  (void *)&blob /* BLOB handle */, &ind /* NULL indicator */);

  /* Fetching CLOB data */

  res = cci_blob_read (con, blob, 0 /* start position */, 1024 /* length */, buffer, &error);

  printf ("content = %s ", buffer);

}

 

/* Memory free */

cci_blob_free(blob);

res=cci_close_req_handle(req);

res = cci_disconnect (con, &error);

return 0;

 

handle_error:

if (req > 0)

{

  cci_close_req_handle (req);

}

if (con > 0)

{

  cci_disconnect(con, &error);

}

return -1;

CCI Error Codes and Error Messages

CCI API functions return a negative number as CCI or CAS (broker application server) error codes when an error occurs. The CCI error codes occur in CCI API functions and CAS error codes occur in CAS.

  • The value of every error code is negative.
  • If the value of error code is between -20002 and -20999, it is caused by CCI API functions. You can output CCI error messages which CCI error codes represent by using the cci_get_err_msg() function.
  • If the value of error code is between -10000 and -10999, it is caused by CAS and transferred by CCI API functions.
  • If the value of error code is between -11000 and -11999, it is caused by broker server and transferred by CCI API functions.
  • If the value of error code is CCI_ER_DBMS(-20001), it is caused by database server. You can check server error codes in err_buf.err_code of the database error buffer (err_buf).

Wanring If an error occurs in server, the value of CCI_ER_DBMS, which is error code returned by a function may be different from the value of the err_buf.err_code. Except server errors, every error code stored in err_buf is identical to that returned by a function.

Note In the earlier version of CUBRID 9.0, the CCI and CAS error codes has values which are different in the version of CUBRID 9.0 or later. Therfore, the users who developed must complie applications after using them and the users who developed by directly assigning error codes must re-complie applications after changing the number values.

For database server errors, see Administrator Guide > Controlling CUBRID > Database Server > Database Server Errors.

The database error buffer (err_buf) is a struct variable of the cas_cci.h header file. For how to use it, see the example below.

CCI error codes which starting with CCI_ER are defined in enum called T_CCI_ERROR_CODE under the $CUBRID/include/cas_cci.h file. Therefore, to use this error code name in program code, you should include a header file in the upper side of code by entering #include "cas_cci.h".

The following example shows how to display error messages. In the example, the error code value (req) returned by cci_prepare() is CCI_ER_DBMS. -493 (server error code) is stored in cci_error.err_code and the error message 'Syntax: Unknown class "notable". select * from notableSyntax' is stored in cci_error.err_msg of the database error buffer.

// gcc -o err err.c -m64 -I${CUBRID}/include -lnsl ${CUBRID}/lib/libcascci.so -lpthread

#include <stdio.h>

#include "cas_cci.h"

 

#define BUFSIZE  (1024)

 

int

main (void)

{

  int con = 0, req = 0, col_count = 0, i, ind;

  int error;

  char *data;

  T_CCI_ERROR err_buf;

  char *query = "select * from notable";

 

//getting a connection handle for a connection with a server

  con = cci_connect ("localhost", 33000, "demodb", "dba", "");

  if (con < 0)

    {

      printf ("cannot connect to database ");

      return 1;

    }

 

//preparing the SQL statement

  req = cci_prepare (con, query, 0, & err_buf);

  if (req < 0)

    {

      if (req == CCI_ER_DBMS)

{

        printf ("error from server: %d, %s ", err_buf.err_code, err_buf.err_msg);

      }

    else

      {

        char msg_buf[1024];

        cci_get_err_msg(req, msg_buf, 1024);

       printf ("error from cas: %d, %s ", req, msg_buf);

       }

      goto handle_error;

    }

// ...

}

The following list shows CCI and CAS error codes.

Error Code

Error Message

Note

CCI_ER_DBMS

"CUBRID DBMS Error"

Error codes returned by functions when an error occurs in server. The causes of the error can be checked with err_code and err_msg stored in the T_CCI_ERROR struct.

CCI_ER_CON_HANDLE

"Invalid connection handle"#

 

CCI_ER_NO_MORE_MEMORY

"Memory allocation error"

Insufficient memory

CCI_ER_COMMUNICATION

"Cannot communicate with server"#

 

CCI_ER_NO_MORE_DATA

"Invalid cursor position"#

 

CCI_ER_TRAN_TYPE

"Unknown transaction type"#

 

CCI_ER_STRING_PARAM

"Invalid string argument"

An error occurred when sql_stmt is NULL in cci_prepare, and cci_prepare_and_execute

CCI_ER_TYPE_CONVERSION

"Type conversion error"

Cannot convert the given value into an actual data type.

CCI_ER_BIND_INDEX

"Parameter index is out of range"

Index that binds data is not valid.

CCI_ER_ATYPE

"Invalid T_CCI_A_TYPE value"#

 

CCI_ER_NOT_BIND

 

Not available

CCI_ER_PARAM_NAME

"Invalid T_CCI_DB_PARAM value"

CCI_ER_COLUMN_INDEX

"Column index is out of range"

CCI_ER_SCHEMA_TYPE

 

Not available

CCI_ER_FILE

"Cannot open file"

Fails to open/read/write a file.

CCI_ER_CONNECT

"Cannot connect to CUBRID CAS"

"Cannot connect to CUBRID CAS"

CCI_ER_ALLOC_CON_HANDLE

"Cannot allocate connection handle"%

CCI_ER_REQ_HANDLE

"Cannot allocate request handle"%

CCI_ER_INVALID_CURSOR_POS

"Invalid cursor position"

CCI_ER_OBJECT

"Invalid oid string"

CCI_ER_CAS

 

Not available

CCI_ER_HOSTNAME

"Unknown host name"

CCI_ER_OID_CMD

"Invalid T_CCI_OID_CMD value"

CCI_ER_BIND_ARRAY_SIZE

"Array binding size is not specified"#

 

CCI_ER_ISOLATION_LEVEL

"Unknown transaction isolation level"#

 

CCI_ER_SET_INDEX

"Invalid set index"

Invalid index is specified when a set element in the T_CCI_SET struct is retrieved.

CCI_ER_DELETED_TUPLE

"Current row was deleted"%

CCI_ER_SAVEPOINT_CMD

"Invalid T_CCI_SAVEPOINT_CMD value"

Invalid T_CCI_SAVEPOINT_CMD value is used as an argument of the cci_savepoint() function.

CCI_ER_THREAD_RUNNING

"Thread is running"

The thread is still executed when cci_execute() is executed with CCI_EXEC_THREAD flagged and check the result of thread execution through cci_get_thread_result().

CCI_ER_INVALID_URL

"Invalid url string"

CCI_ER_INVALID_LOB_READ_POS

"Invalid lob read position"#

 

CCI_ER_INVALID_LOB_HANDLE

"Invalid lob handle"#

 

CCI_ER_NO_PROPERTY

#

 

CCI_ER_PROPERTY_TYPE

#

 

CCI_ER_INVALID_DATASOURCE

#

 

CCI_ER_DATASOURCE_TIMEOUT

#

 

CCI_ER_DATASOURCE_TIMEDWAIT

#

 

CCI_ER_LOGIN_TIMEOUT

#

 

CCI_ER_QUERY_TIMEOUT

#

 

CCI_ER_RESULT_SET_CLOSED

#

 

CCI_ER_INVALID_HOLDABILITY

"Invalid holdability mode. The only accepted values are 0 or 1"#

 

CCI_ER_NOT_UPDATABLE

"Request handle is not updatable"#

 

CAS_ER_INTERNAL

#

 

CAS_ER_NO_MORE_MEMORY

"Memory allocation error"#

 

CAS_ER_COMMUNICATION

"Cannot receive data from client"#

 

CAS_ER_ARGS

"Invalid argument"#

 

CAS_ER_TRAN_TYPE

"Invalid transaction type argument"#

 

CAS_ER_SRV_HANDLE

"Server handle not found"#

 

CAS_ER_NUM_BIND

"Invalid parameter binding value argument"

The number of data to be bound does not match with the number of data to be transferred.

CAS_ER_UNKNOWN_U_TYPE

"Invalid T_CCI_U_TYPE value"#

 

CAS_ER_DB_VALUE

"Cannot make DB_VALUE"#

 

CAS_ER_TYPE_CONVERSION

"Type conversion error"#

 

CAS_ER_PARAM_NAME

"Invalid T_CCI_DB_PARAM value"

The name of the system parameter is not valid.

CAS_ER_NO_MORE_DATA

"Invalid cursor position"#

 

CAS_ER_OBJECT

"Invalid oid"#

 

CAS_ER_OPEN_FILE

"Cannot open file"#

 

CAS_ER_SCHEMA_TYPE

"Invalid T_CCI_SCH_TYPE value"#

 

CAS_ER_VERSION

"Version mismatch"

The DB server version does not compatible with the client (CAS) version.

CAS_ER_FREE_SERVER

"Cannot process the request.  Try again later"

The CAS which handles connection request of applications cannot be assigned.

CAS_ER_NOT_AUTHORIZED_CLIENT

"Authorization error"

Access is denied.

CAS_ER_QUERY_CANCEL

"Cannot cancel the query"#

 

CAS_ER_NOT_COLLECTION

"The attribute domain must be the set type"#

 

CAS_ER_COLLECTION_DOMAIN

"Heterogeneous set is not supported"#

 

CAS_ER_NO_MORE_RESULT_SET

"No More Result"#

 

CAS_ER_INVALID_CALL_STMT

"Illegal CALL statement"#

 

CAS_ER_STMT_POOLING

"Invalid plan"#

 

CAS_ER_DBSERVER_DISCONNECTED

"Cannot communicate with DB Server"#

 

CAS_ER_MAX_PREPARED_STMT_COUNT_EXCEEDED

"Cannot prepare more than MAX_PREPARED_STMT_COUNT statements"#

 

CAS_ER_HOLDABLE_NOT_ALLOWED

"Holdable results may not be updatable or sensitive"#

 

CAS_ER_HOLDABLE_NOT_ALLOWED_KEEP_CON_OFF

"Holdable results are not allowed while KEEP_CONNECTION is off"#

 

C Type Definition

 The following shows the construct used in CCI API functions.

Name

Type

Member

Description

T_CCI_ERROR

struct

char err_msg[1024]

Representation of database error info

int err_code

T_CCI_BIT

struct

int size

Representation of bit type

char *buf

T_CCI_DATE

struct

short yr

Representation of timestamp, date, and time type

short mon

short day

short hh

short mm

short ss

short ms

T_CCI_SET

void*

 

Representation of set type

T_CCI_COL_INFO

struct

T_CCI_U_TYPE type

Representation of column information for the SELECT statement

char is_non_null

short scale

int precision

char *col_name

char *real_attr

char *class_name

T_CCI_QUERY_RESULT

struct

int result_count

Results of batch execution

int stmt_type

char *err_msg

char oid[32]

T_CCI_PARAM_INFO

struct

T_CCI_PARAM_MODE mode

Representation of input parameter info

T_CCI_U_TYPE type

short scale

int precision

T_CCI_U_TYPE

enum

CCI_U_TYPE_UNKNOWN

Database type info

CCI_U_TYPE_NULL

CCI_U_TYPE_CHAR

CCI_U_TYPE_STRING

CCI_U_TYPE_NCHAR

CCI_U_TYPE_VARNCHAR

CCI_U_TYPE_BIT

CCI_U_TYPE_VARBIT

CCI_U_TYPE_NUMERIC

CCI_U_TYPE_INT

CCI_U_TYPE_SHORT

CCI_U_TYPE_MONETARY

CCI_U_TYPE_FLOAT

CCI_U_TYPE_DOUBLE

CCI_U_TYPE_DATE

CCI_U_TYPE_TIME

CCI_U_TYPE_TIMESTAMP

CCI_U_TYPE_SET

CCI_U_TYPE_MULTISET

CCI_U_TYPE_SEQUENCE

CCI_U_TYPE_OBJECT

CCI_U_TYPE_BIGINT

CCI_U_TYPE_DATETIME

T_CCI_A_TYPE

enum

CCI_A_TYPE_STR

Representation of type info used in API

CCI_A_TYPE_INT

CCI_A_TYPE_FLOAT

CCI_A_TYPE_DOUBLE

CCI_A_TYPE_BIT

CCI_A_TYPE_DATE

CCI_A_TYPE_SET

CCI_A_TYPE_BIGINT

CCI_A_TYPE_BLOB

CCI_A_TYPE_CLOB

T_CCI_DB_PARAM

enum

CCI_PARAM_ISOLATION_LEVEL

System parameter names

CCI_PARAM_LOCK_TIMEOUT

CCI_PARAM_MAX_STRING_LENGTH

CCI_PARAM_AUTO_COMMIT

T_CCI_SCH_TYPE

enum

CCI_SCH_CLASS

CCI_SCH_VCLASS

CCI_SCH_QUERY_SPEC

CCI_SCH_ATTRIBUTE

CCI_SCH_CLASS_ATTRIBUTE

CCI_SCH_METHOD

CCI_SCH_CLASS_METHOD

CCI_SCH_METHOD_FILE

CCI_SCH_SUPERCLASS

CCI_SCH_SUBCLASS

CCI_SCH_CONSTRAIT

CCI_SCH_TRIGGER

CCI_SCH_CLASS_PRIVILEGE

CCI_SCH_ATTR_PRIVILEGE

CCI_SCH_DIRECT_SUPER_CLASS

CCI_SCH_PRIMARY_KEY

CCI_SCH_IMPORTED_KEYS

CCI_SCH_EXPORTED_KEYS

CCI_SCH_CROSS_REFERENCE

T_CCI_CUBRID_STMT

enum

CUBRID_STMT_ALTER_CLASS

 

CUBRID_STMT_ALTER_SERIAL

CUBRID_STMT_COMMIT_WORK

CUBRID_STMT_REGISTER_DATABASE

CUBRID_STMT_CREATE_CLASS

CUBRID_STMT_CREATE_INDEX

CUBRID_STMT_CREATE_TRIGGER

CUBRID_STMT_CREATE_SERIAL

CUBRID_STMT_DROP_DATABASE

CUBRID_STMT_DROP_CLASS

CUBRID_STMT_DROP_INDEX

CUBRID_STMT_DROP_LABEL

CUBRID_STMT_DROP_TRIGGER

CUBRID_STMT_DROP_SERIAL

CUBRID_STMT_EVALUATE

CUBRID_STMT_RENAME_CLASS

CUBRID_STMT_ROLLBACK_WORK

CUBRID_STMT_GRANT

CUBRID_STMT_REVOKE

CUBRID_STMT_STATISTICS

CUBRID_STMT_INSERT

CUBRID_STMT_SELECT

CUBRID_STMT_UPDATE

CUBRID_STMT_DELETE

CUBRID_STMT_CALL

CUBRID_STMT_GET_ISO_LVL

CUBRID_STMT_GET_TIMEOUT

CUBRID_STMT_GET_OPT_LVL

CUBRID_STMT_SET_OPT_LVL

CUBRID_STMT_SCOPE

CUBRID_STMT_GET_TRIGGER

CUBRID_STMT_SET_TRIGGER

CUBRID_STMT_SAVEPOINT

CUBRID_STMT_PREPARE

CUBRID_STMT_ATTACH

CUBRID_STMT_USE

CUBRID_STMT_REMOVE_TRIGGER

CUBRID_STMT_RENAME_TRIGGER

CUBRID_STMT_ON_LDB

CUBRID_STMT_GET_LDB

CUBRID_STMT_SET_LDB

CUBRID_STMT_GET_STATS

CUBRID_STMT_CREATE_USER

CUBRID_STMT_DROP_USER

CUBRID_STMT_ALTER_USER

T_CCI_CURSOR_POS

enum

CCI_CURSOR_FIRST

CCI_CURSOR_CURRENT

CCI_CURSOR_LAST

T_CCI_TRAN_ISOLATION

enum

TRAN_COMMIT_CLASS_UNCOMMIT_INSTANCE

 

TRAN_COMMIT_CLASS_COMMIT_INSTANCE

TRAN_REP_CLASS_UNCOMMIT_INSTANCE

TRAN_REP_CLASS_COMMIT_INSTANCE

TRAN_REP_CLASS_REP_INSTANCE

TRAN_SERIALIZABLE

T_CCI_PARAM_MODE

enum

CCI_PARAM_MODE_UNKNOWN

CCI_PARAM_MODE_IN

CCI_PARAM_MODE_OUT

CCI_PARAM_MODE_INOUT

Note If a string longer than defined max length is inserted (INSERT) or updated (UPDATE), the string will be truncated.

Note To get the latest information about CCI driver, click http://www.cubrid.org/wiki_apis/entry/cubrid-cci-driver.