Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

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

cci_set_allocators

설명

사용자가 정의한 메모리 할당 및 해제 함수들을 등록하여 사용할 수 있게 한다. 이 함수를 실행하면 CCI API 내부에서 사용되는 모든 메모리 할당 및 해제 작업은 사용자가 정의한 메모리 할당 함수들을 사용하게 된다. 이를 사용하지 않으면 기본적인 시스템 함수들(malloc, free, realloc, calloc)이 사용된다.

구문

int cci_set_allocators(CCI_MALLOC_FUNCTION malloc_func, CCI_FREE_FUNCTION free_func, CCI_REALLOC_FUNCTION realloc_func, CCI_CALLOC_FUNCTION calloc_func)

  • malloc_func : (IN) malloc에 해당하는 외부 정의 함수에 대한 포인터
  • free_func : (IN) free에 해당하는 외부 정의 함수에 대한 포인터
  • realloc_func : (IN) realloc에 해당하는 외부 정의 함수에 대한 포인터
  • calloc_func : (IN) calloc에 해당하는 외부 정의 함수에 대한 포인터
리턴 값
  • 에러 코드(0: 성공)
에러 코드
  • CCI_ER_NOT_IMPLEMENTED
예제

/*

       How to build: gcc -Wall -g -o test_cci test_cci.c -I${CUBRID}/include -L${CUBRID}/lib -lcascci

*/

 

#include <stdio.h>

#include <stdlib.h>

#include "cas_cci.h"

 

void *

my_malloc(size_t size)

{

  printf ("my malloc: size: %ld ", size);

  return malloc (size);

}

 

void *

my_calloc(size_t nm, size_t size)

{

  printf ("my calloc: nm: %ld, size: %ld ", nm, size);

  return calloc (nm, size);

}

 

void *

my_realloc(void *ptr, size_t size)

{

  printf ("my realloc: ptr: %p, size: %ld ", ptr, size);

  return realloc (ptr, size);

}

 

void

my_free(void *ptr)

{

  printf ("my free: ptr: %p ", ptr);

  return free (ptr);

}

 

 

int

test_simple (int con)

{

  int 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 db_class";

 

//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;

}

 

 

int main()

{

  int con = 0;

 

  if (cci_set_allocators (my_malloc, my_free, my_realloc, my_calloc) != 0)

  {

      printf ("cannot register allocators ");

      return 1;

  };

 

  //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;

  }

 

  test_simple (con);

  return 0;

}