/**********************************************************************
// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.
//
// @@@ END COPYRIGHT @@@
**********************************************************************/
/**************************************************************************
**************************************************************************/
//
// MODULE: TDM_COMMON.IDL 
//
// PURPOSE: Describes common typedefs used by the ODBC 
//    Krypton IDL specifications.
//
//// Modification History
//	11Nov97     	Changed to colHeadingNm to be of 60 characters in length
//	09Sep97		Changed the parameter name autoCommitOn to autocommit and its type from
//			boolean to short in CONNECTION_CONTEXT_def
//
//	22Aug97		Changed some of the typedefs into basic types, since these typedefs
//			are declared elsewhere.
//  1JAN98		Changes for Association Service integration
#ifndef _ODBCSRVRCOMMON_DEFINED
#define _ODBCSRVRCOMMON_DEFINED 

#include "odbcCommon.idl"

// 1/1/98 - added ASSOC_NM, moved UNKNOWN_NM to position 0
//          to match Cfg Svc implementation
typedef enum CfgSvc_REQ_t {
    UNKNOWN_NM
   ,ASSOC_NM
   ,DATASOURCE_NM
   ,USER_NM
   ,PROFILE_NM
} CfgSvc_REQ_def;

typedef enum DS_AUTOMATION_t {
   AUTOMATIC,
   MANUAL
} DS_AUTOMATION_def;

typedef sequence<SQL_IDENTIFIER_def> DATASOURCE_LIST_def;

typedef struct DATASOURCE_DESC_t {
   SQL_IDENTIFIER_def   DSNm;
   unsigned long		DSNStatus;
   TIMESTAMP_STR_def    LastStatusChange;
   long				    MaxSrvrCnt;
   long					AvailSrvrCnt;
   long				    InitSrvrCnt;
   long					StartAheadCnt;
   INTERVAL_NUM_def     SrvrIdleTimeout;
   INTERVAL_NUM_def     ConnIdleTimeout;
   INTERVAL_NUM_def     RefreshRate;
   TIMESTAMP_STR_def    LastUpdated;    
} DATASOURCE_DESC_def;


typedef struct RES_HIT_DESC_t {
	SQL_IDENTIFIER_def   AttrNm;    
	long long            Limit;
	string<128>	         Action;	
	long long			 ActualValue;
} RES_HIT_DESC_def;

typedef sequence<octet>	DEFINE_DESC_LIST_def;

typedef short NSK_PROCESS_HANDLE[10];

typedef struct PROCESS_ID_t {
    short							nodeId;
    long							processId;
	NSK_PROCESS_HANDLE				pHandle;
} PROCESS_ID_def;


typedef struct DATASOURCE_CFG_t {
   SQL_IDENTIFIER_def   DSName;
   long					DSId;
   short				defaultDS;
   DS_AUTOMATION_def	DSAutomation;
   long					MaxSrvrCnt;
   long					AvailSrvrCnt;
   long					InitSrvrCnt;
   long					StartAheadCnt;
   INTERVAL_NUM_def     SrvrIdleTimeout;
   INTERVAL_NUM_def     ConnIdleTimeout;
   INTERVAL_NUM_def     RefreshRate; 
   short				Status;
   long					StatusChangeTime;        
   RES_DESC_LIST_def	ResDescList;
   ENV_DESC_LIST_def	EnvDescList;
   DEFINE_DESC_LIST_def	DefineDescList;
} DATASOURCE_CFG_def;

typedef sequence<DATASOURCE_CFG_def> DATASOURCE_CFG_LIST_def;


#endif
