mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-25 00:03:03 +01:00
160 lines
5.8 KiB
C
160 lines
5.8 KiB
C
/*
|
|
* PROGRAM: JRD Access Method
|
|
* MODULE: ntrace.h
|
|
* DESCRIPTION: Trace API header
|
|
*
|
|
* The contents of this file are subject to the Initial
|
|
* Developer's Public License Version 1.0 (the "License");
|
|
* you may not use this file except in compliance with the
|
|
* License. You may obtain a copy of the License at
|
|
* http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_idpl.
|
|
*
|
|
* Software distributed under the License is distributed AS IS,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing rights
|
|
* and limitations under the License.
|
|
*
|
|
* The Original Code was created by Nickolay Samofatov
|
|
* for the Firebird Open Source RDBMS project.
|
|
*
|
|
* Copyright (c) 2004 Nickolay Samofatov <nickolay@broadviewsoftware.com>
|
|
* and all contributors signed below.
|
|
*
|
|
* All Rights Reserved.
|
|
* Contributor(s): ______________________________________.
|
|
*
|
|
*
|
|
* $Id: ntrace.h,v 1.3 2004-06-30 01:38:57 skidder Exp $
|
|
*
|
|
*/
|
|
|
|
/* Keep this header written using C language, please */
|
|
|
|
|
|
/* Version of API, used for version fields in TracePlugin structure */
|
|
#define NTRACE_VERSION 1
|
|
|
|
#define NTRACE_TRUE 1
|
|
#define NTRACE_FALSE 0
|
|
|
|
/* Database objects*/
|
|
|
|
typedef int ntrace_connection_t;
|
|
|
|
typedef int ntrace_transaction_t;
|
|
|
|
typedef int ntrace_procedure_t;
|
|
|
|
typedef void* ntrace_statement_t;
|
|
|
|
/* Plugin-specific argument. Passed by the engine to each hook */
|
|
typedef void* ntrace_object_t;
|
|
|
|
/* Structure version*/
|
|
typedef int ntrace_version_t;
|
|
|
|
/* Boolean type */
|
|
typedef int ntrace_boolean_t;
|
|
|
|
/* Performance counter */
|
|
typedef unsigned int ntrace_counter_t;
|
|
|
|
/* Used for arrays with binary data */
|
|
typedef unsigned char ntrace_byte_t;
|
|
|
|
/* Lengths of various arrays and structures */
|
|
typedef unsigned int ntrace_size_t;
|
|
|
|
/* Performance counters for individual table */
|
|
struct TableStats {
|
|
ntrace_counter_t tin_id; /* Relation ID */
|
|
ntrace_counter_t tin_indexed_reads;
|
|
ntrace_counter_t tin_nonindexed_reads;
|
|
ntrace_counter_t tin_updates;
|
|
ntrace_counter_t tin_deletes;
|
|
ntrace_counter_t tin_inserts;
|
|
};
|
|
|
|
/* Performance statistics for operation */
|
|
struct PerformanceInfo {
|
|
ntrace_counter_t pin_time; /* Total operation time in milliseconds */
|
|
ntrace_counter_t pin_reads; /* Page reads for operation */
|
|
ntrace_counter_t pin_writes; /* Page writes for operation */
|
|
ntrace_counter_t pin_fetches; /* Page fetches from OS */
|
|
|
|
ntrace_size_t pin_count; /* Number of relations involved in analysis */
|
|
struct TableStats *pin_tables; /* Pointer to array with table stats */
|
|
};
|
|
|
|
/* Get error string for hook failure that happened */
|
|
typedef char* (*ntrace_get_error_t)(ntrace_object_t tpl_object);
|
|
|
|
/* Finalize plugin interface for this particular database */
|
|
typedef void (*ntrace_finalize_t)(ntrace_object_t tpl_object);
|
|
|
|
/* Create/close attachment */
|
|
typedef ntrace_boolean_t (*ntrace_event_attach_t)(ntrace_object_t tpl_object,
|
|
ntrace_connection_t connection, ntrace_size_t dpb_length, const ntrace_byte_t *dpb);
|
|
typedef ntrace_boolean_t (*ntrace_event_detach_t)(ntrace_object_t tpl_object,
|
|
ntrace_connection_t connection);
|
|
|
|
/* Start/end transaction */
|
|
typedef ntrace_boolean_t (*ntrace_event_transaction_start_t)(ntrace_object_t tpl_object,
|
|
ntrace_connection_t connection, ntrace_transaction_t transaction,
|
|
ntrace_size_t tpb_length, const ntrace_byte_t* tpb);
|
|
typedef ntrace_boolean_t (*ntrace_event_transaction_end_t)(ntrace_object_t tpl_object,
|
|
ntrace_connection_t connection, ntrace_transaction_t transaction,
|
|
ntrace_boolean_t commit, ntrace_boolean_t retain_context);
|
|
|
|
/* DSQL statement lifecycle */
|
|
typedef ntrace_boolean_t (*ntrace_event_dsql_prepare_t)(ntrace_object_t tpl_object,
|
|
ntrace_connection_t connection, ntrace_transaction_t transaction,
|
|
ntrace_statement_t statement, const char* sql, ntrace_counter_t time_millis,
|
|
ntrace_size_t access_path_length, const ntrace_byte_t* access_path);
|
|
typedef ntrace_boolean_t (*ntrace_event_dsql_execute_t)(ntrace_object_t tpl_object,
|
|
ntrace_connection_t connection, ntrace_transaction_t transaction,
|
|
ntrace_statement_t statement, ntrace_size_t paramcount, struct paramdsc* parameters,
|
|
PerformanceInfo *info);
|
|
typedef ntrace_boolean_t (*ntrace_event_dsql_fetch_t)(ntrace_object_t tpl_object,
|
|
ntrace_connection_t connection, ntrace_transaction_t transaction,
|
|
ntrace_statement_t statement, PerformanceInfo *info, ntrace_counter_t records_fetched);
|
|
typedef ntrace_boolean_t (*ntrace_event_dsql_free_t)(ntrace_object_t tpl_object,
|
|
ntrace_connection_t connection, ntrace_transaction_t transaction,
|
|
ntrace_statement_t statement, unsigned short option);
|
|
|
|
/* Procedure execution */
|
|
typedef ntrace_boolean_t (*ntrace_event_proc_execute_t)(ntrace_object_t tpl_object,
|
|
ntrace_connection_t connection, ntrace_transaction_t transaction,
|
|
ntrace_procedure_t procedure, ntrace_size_t argcount, struct paramdsc* arguments,
|
|
PerformanceInfo *info);
|
|
|
|
/* API of trace plugin. Used to deliver notifications for each database */
|
|
struct TracePlugin {
|
|
/* API version */
|
|
ntrace_version_t tpl_version;
|
|
/* Object pointer to pass to each hook */
|
|
ntrace_object_t tpl_object;
|
|
|
|
/* Finalize plugin. Called when database is closed by the engine */
|
|
ntrace_finalize_t tpl_finalize;
|
|
|
|
/* Function to return error string for hook failure */
|
|
ntrace_get_error_t tpl_get_error;
|
|
|
|
|
|
/* Events supported */
|
|
ntrace_event_attach_t tpl_event_attach;
|
|
ntrace_event_detach_t tpl_event_detach;
|
|
ntrace_event_transaction_start_t tpl_event_transaction_start;
|
|
ntrace_event_transaction_end_t tpl_event_transaction_end;
|
|
ntrace_event_dsql_prepare_t tpl_event_dsql_prepare;
|
|
ntrace_event_dsql_execute_t tpl_event_dsql_execute;
|
|
ntrace_event_dsql_fetch_t tpl_event_dsql_fetch;
|
|
ntrace_event_dsql_free_t tpl_event_dsql_free;
|
|
|
|
ntrace_event_proc_execute_t tpl_event_proc_execute;
|
|
};
|
|
|
|
/* Trace API plugin entrypoint type */
|
|
typedef ntrace_boolean_t (*ntrace_attach_t)(const char* db_filename, const TracePlugin** plugin);
|