8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-27 17:23:03 +01:00
firebird-mirror/src/alice/alice.h
2003-04-16 10:18:51 +00:00

207 lines
5.2 KiB
C++

/*
* PROGRAM: Alice
* MODULE: alice.h
* DESCRIPTION: Block definitions
*
* The contents of this file are subject to the Interbase 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.Inprise.com/IPL.html
*
* Software distributed under the License is distributed on an
* "AS IS" basis, 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 Inprise Corporation
* and its predecessors. Portions created by Inprise Corporation are
* Copyright (C) Inprise Corporation.
*
* All Rights Reserved.
* Contributor(s): ______________________________________.
*/
#ifndef ALICE_ALICE_H
#define ALICE_ALICE_H
#include "../jrd/ib_stdio.h"
#include "../jrd/y_ref.h"
#include "../jrd/ibase.h"
#include "../jrd/ibsetjmp.h"
#include "../jrd/thd.h"
#include "../alice/all.h"
#include "../alice/alice_proto.h"
#include "../include/fb_blk.h"
#include "../common/classes/alloc.h"
#include <vector>
#define BLKDEF(type, root, tail) type,
enum alice_blk_t
{
alice_type_MIN = 0,
#include "../alice/blk.h"
alice_type_MAX
};
#undef BLKDEF
#define VAL_INVALID_DB_VERSION 0
#define VAL_RECORD_ERRORS 1
#define VAL_BLOB_PAGE_ERRORS 2
#define VAL_DATA_PAGE_ERRORS 3
#define VAL_INDEX_PAGE_ERRORS 4
#define VAL_POINTER_PAGE_ERRORS 5
#define VAL_TIP_PAGE_ERRORS 6
#define VAL_PAGE_ERRORS 7
#define MAX_VAL_ERRORS 8
typedef struct user_action
{
ULONG ua_switches;
UCHAR *ua_user;
UCHAR *ua_password;
UCHAR ua_use;
UCHAR ua_force;
BOOLEAN ua_read_only;
SLONG ua_shutdown_delay;
SLONG ua_sweep_interval;
SLONG ua_transaction;
SLONG ua_page_buffers;
USHORT ua_debug;
SLONG ua_val_errors[MAX_VAL_ERRORS];
TEXT ua_log_file[MAXPATHLEN];
USHORT ua_db_SQL_dialect;
} *USER_ACTION;
/* String block: used to store a string of constant length. */
class str : public pool_alloc_rpt<UCHAR, alice_type_str>
{
public:
USHORT str_length;
UCHAR str_data[2];
};
typedef str *STR;
/* Transaction block: used to store info about a multidatabase transaction. */
typedef struct tdr : public pool_alloc<alice_type_tdr>
{
struct tdr *tdr_next; /* next subtransaction */
SLONG tdr_id; /* database-specific transaction id */
struct str *tdr_fullpath; /* full (possibly) remote pathname */
TEXT *tdr_filename; /* filename within full pathname */
struct str *tdr_host_site; /* host for transaction */
struct str *tdr_remote_site; /* site for remote transaction */
FRBRD *tdr_handle; /* reconnected transaction handle */
FRBRD *tdr_db_handle; /* reattached database handle */
USHORT tdr_db_caps; /* capabilities of database */
USHORT tdr_state; /* see flags below */
} *TDR;
/* Transaction Description Record */
#define TDR_VERSION 1
#define TDR_HOST_SITE 1
#define TDR_DATABASE_PATH 2
#define TDR_TRANSACTION_ID 3
#define TDR_REMOTE_SITE 4
/* flags for tdr_db_caps */
#define CAP_none 0
#define CAP_transactions 1 /* db has a RDB$TRANSACTIONS relation */
/* flags for tdr_state */
#define TRA_none 0 /* transaction description record is missing */
#define TRA_limbo 1 /* has been prepared */
#define TRA_commit 2 /* has committed */
#define TRA_rollback 3 /* has rolled back */
#define TRA_unknown 4 /* database couldn't be reattached, state is unknown */
/* a couple of obscure blocks used only in data allocator routines */
class vec : public pool_alloc_rpt<class blk*, alice_type_vec>
{
public:
ULONG vec_count;
struct blk *vec_object[1];
};
typedef vec *VEC;
class vcl : public pool_alloc_rpt<SLONG, alice_type_vcl>
{
ULONG vcl_count;
SLONG vcl_long[1];
};
typedef vcl *VCL;
/* Global switches and data */
#include "../jrd/svc.h"
class tgbl
{
public:
tgbl(AliceMemoryPool *p) : pools(0, (AliceMemoryPool*)0,
pool_vec_t::allocator_type(*p)) {}
struct thdd tgbl_thd_data;
struct user_action ALICE_data;
AliceMemoryPool *ALICE_permanent_pool;
AliceMemoryPool *ALICE_default_pool;
ISC_STATUS_ARRAY status_vector;
typedef std::vector<AliceMemoryPool*, Firebird::allocator<AliceMemoryPool*> > pool_vec_t;
pool_vec_t pools;
int exit_code;
OUTPUTPROC output_proc;
SLONG output_data;
IB_FILE* output_file;
SVC service_blk;
isc_db_handle db_handle;
isc_tr_handle tr_handle;
ISC_STATUS* status;
USHORT sw_redirect;
USHORT sw_service;
USHORT sw_service_thd;
};
typedef tgbl *TGBL;
#ifdef GET_THREAD_DATA
#undef GET_THREAD_DATA
#endif
#ifdef SUPERSERVER
#define GET_THREAD_DATA ((TGBL) THD_get_specific())
#ifdef FB_FROM_ALICE_CPP
#define SET_THREAD_DATA THD_put_specific ((THDD) tdgbl); \
tdgbl->tgbl_thd_data.thdd_type = \
THDD_TYPE_TALICE
#else /* FB_FROM_ALICE_CPP */
#define SET_THREAD_DATA THD_put_specific ((THDD) tdgbl); \
tdgbl->tgbl_thd_data.thdd_type = \
reinterpret_cast<tgbl*>(THDD_TYPE_TALICE)
#endif /* FB_FROM_ALICE_CPP */
#define RESTORE_THREAD_DATA THD_restore_specific();
#else
extern struct tgbl *gdgbl;
#define GET_THREAD_DATA (gdgbl)
#define SET_THREAD_DATA gdgbl = const_cast<tgbl*>(tdgbl); \
tdgbl->tgbl_thd_data.thdd_type = THDD_TYPE_TGBL
#define RESTORE_THREAD_DATA
#endif
#define NOOUTPUT 2
#endif // ALICE_ALICE_H