Replacement Scans

Replacement Scans (대체 스캔)

replacement scan API는 카탈로그에 존재하지 않는 테이블을 읽을 때 호출되는 콜백을 등록하는 데 사용할 수 있어요. 예를 들어 SELECT * FROM my_table 같은 쿼리가 실행되고 my_table이 존재하지 않으면, my_table을 파라미터로 replacement scan 콜백이 호출돼요. 그런 다음 replacement scan은 특정 파라미터를 가진 테이블 함수를 삽입해 테이블 읽기를 대체할 수 있어요.

출처: 문서

본문

API 참조 개요

void duckdb_add_replacement_scan(duckdb_database db, duckdb_replacement_callback_t replacement, void *extra_data, duckdb_delete_callback_t delete_callback);
void duckdb_replacement_scan_set_function_name(duckdb_replacement_scan_info info, const char *function_name);
void duckdb_replacement_scan_add_parameter(duckdb_replacement_scan_info info, duckdb_value parameter);
void duckdb_replacement_scan_set_error(duckdb_replacement_scan_info info, const char *error);

duckdb_add_replacement_scan

지정된 데이터베이스에 replacement scan 정의를 추가해요.

문법
void duckdb_add_replacement_scan(
  duckdb_database db,
  duckdb_replacement_callback_t replacement,
  void *extra_data,
  duckdb_delete_callback_t delete_callback
);
파라미터
  • db: replacement scan을 추가할 데이터베이스 객체
  • replacement: replacement scan 콜백
  • extra_data: 지정된 콜백으로 다시 전달되는 추가 데이터
  • delete_callback: 있는 경우 extra data에 대해 호출할 delete 콜백

duckdb_replacement_scan_set_function_name

대체 함수 이름을 설정해요. 이 함수가 replacement 콜백에서 호출되면 replacement scan이 수행돼요. 호출되지 않으면 replacement 콜백이 수행되지 않아요.

문법
void duckdb_replacement_scan_set_function_name(
  duckdb_replacement_scan_info info,
  const char *function_name
);
파라미터
  • info: info 객체
  • function_name: 대체할 함수 이름.

duckdb_replacement_scan_add_parameter

replacement scan 함수에 파라미터를 추가해요.

문법
void duckdb_replacement_scan_add_parameter(
  duckdb_replacement_scan_info info,
  duckdb_value parameter
);
파라미터
  • info: info 객체
  • parameter: 추가할 파라미터.

duckdb_replacement_scan_set_error

replacement scan 실행 중 오류가 발생했음을 보고해요.

문법
void duckdb_replacement_scan_set_error(
  duckdb_replacement_scan_info info,
  const char *error
);
파라미터
  • info: info 객체
  • error: 오류 메시지

더 알아보기 (Learn more)

C API 전반에 대한 자세한 내용은 [C API]({% link docs/current/clients/c/api.md %}) 문서를 참고해요.