/*
 *	PROGRAM:	JRD Data Definition Utility
 *	MODULE:		dyn.h
 *	DESCRIPTION:	Dynamic data definition local data
 *
 * 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	_JRD_DYN_H_
#define _JRD_DYN_H_

#define ALL_PRIVILEGES		"SIUDR"
		/* all applicable grant/revoke privileges */
#define ALL_PROC_PRIVILEGES	"X"
		/* all applicable grant/revoke privileges for a procedure */
#define DYN_MSG_FAC		8
#define STUFF_COUNT		4
#define MAX_KEY			256
#define TEXT_BLOB_LENGTH	512

#define PRIMARY_KEY		"PRIMARY KEY"
#define FOREIGN_KEY		"FOREIGN KEY"
#define UNIQUE_CNSTRT		"UNIQUE"
#define CHECK_CNSTRT		"CHECK"
#define NOT_NULL_CNSTRT		"NOT NULL"

#define GET_STRING(from,to)	DYN_get_string ((TEXT**)from, (TEXT*)to, sizeof (to), TRUE)

#define GET_STRING_2(from,to)	DYN_get_string ((TEXT**)from, (TEXT*)to, sizeof (to), FALSE)

#define PROC_NAME_SIZE		32
#define FLD_SRC_LEN		32
#define FLD_NAME_LEN		32
#define REL_NAME_LEN		32


typedef struct gbl
{
	JRD_TRA gbl_transaction;
} *GBL;

typedef struct dyn_fld {
	DSC dyn_dsc;
	BOOLEAN dyn_null_flag;
	USHORT dyn_dtype;
	USHORT dyn_precision;
	USHORT dyn_charlen;
	SSHORT dyn_collation;
	SSHORT dyn_charset;
	TEXT dyn_fld_source[FLD_SRC_LEN];
	TEXT dyn_rel_name[REL_NAME_LEN];
	TEXT dyn_fld_name[FLD_NAME_LEN];
    USHORT dyn_charbytelen; /* Used to check modify operations on string types. */

} *DYN_FLD;

extern void DYN_error(USHORT, USHORT, TEXT *, TEXT *, TEXT *, TEXT *, TEXT *);
extern void DYN_error_punt(USHORT, USHORT, TEXT *, TEXT *, TEXT *, TEXT *,
						   TEXT *);
extern void DYN_execute(GBL, UCHAR **, TEXT *, TEXT *, TEXT *, TEXT *,
						TEXT *);
extern SLONG DYN_get_number(UCHAR **);
extern USHORT DYN_get_string(TEXT **, TEXT *, USHORT, USHORT);
extern void DYN_get_string2(TEXT **, TEXT *, USHORT);
extern BOOLEAN DYN_is_it_sql_role(GBL, TEXT *, TEXT *, TDBB);
extern USHORT DYN_put_blr_blob(GBL, UCHAR **, struct bid *);
extern USHORT DYN_put_blr_blob2(GBL, UCHAR **, struct bid *);
extern USHORT DYN_put_text_blob(GBL, UCHAR **, struct bid *);
extern USHORT DYN_put_text_blob2(GBL, UCHAR **, struct bid *);
extern void DYN_rundown_request(BLK, SSHORT);
extern USHORT DYN_skip_attribute(UCHAR **);
extern USHORT DYN_skip_attribute2(UCHAR **);
extern void DYN_unsupported_verb(void);

#endif /* _JRD_DYN_H_ */
