/* File: DatabaseAccess.h Contains: Database Access Manager Interfaces. Version: Technology: System 7.5 Release: QuickTime 6.0.2 Copyright: (c) 1989-2001 by Apple Computer, Inc., all rights reserved Bugs?: For bug reports, consult the following page on the World Wide Web: http://developer.apple.com/bugreporter/ */ #ifndef __DATABASEACCESS__ #define __DATABASEACCESS__ #ifndef __RESOURCES__ #include #endif #if PRAGMA_ONCE #pragma once #endif #ifdef __cplusplus extern "C" { #endif #if PRAGMA_IMPORT #pragma import on #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=mac68k #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(push, 2) #elif PRAGMA_STRUCT_PACK #pragma pack(2) #endif /* data type codes */ enum { typeNone = FOUR_CHAR_CODE('none'), typeDate = FOUR_CHAR_CODE('date'), typeTime = FOUR_CHAR_CODE('time'), typeTimeStamp = FOUR_CHAR_CODE('tims'), typeDecimal = FOUR_CHAR_CODE('deci'), typeMoney = FOUR_CHAR_CODE('mone'), typeVChar = FOUR_CHAR_CODE('vcha'), typeVBin = FOUR_CHAR_CODE('vbin'), typeLChar = FOUR_CHAR_CODE('lcha'), typeLBin = FOUR_CHAR_CODE('lbin'), typeDiscard = FOUR_CHAR_CODE('disc'), /* "dummy" types for DBResultsToText */ typeUnknown = FOUR_CHAR_CODE('unkn'), typeColBreak = FOUR_CHAR_CODE('colb'), typeRowBreak = FOUR_CHAR_CODE('rowb'), /* pass this in to DBGetItem for any data type */ typeAnyType = 0 }; /* infinite timeout value for DBGetItem */ enum { /* messages for status functions for DBStartQuery */ kDBUpdateWind = 0, kDBAboutToInit = 1, kDBInitComplete = 2, kDBSendComplete = 3, kDBExecComplete = 4, kDBStartQueryComplete = 5 }; enum { /* messages for status functions for DBGetQueryResults */ kDBGetItemComplete = 6, kDBGetQueryResultsComplete = 7, kDBWaitForever = -1 }; enum { /* flags for DBGetItem */ kDBLastColFlag = 0x0001, kDBNullFlag = 0x0004 }; typedef OSType DBType; typedef struct DBAsyncParamBlockRec DBAsyncParamBlockRec; typedef DBAsyncParamBlockRec * DBAsyncParmBlkPtr; typedef CALLBACK_API( void , DBCompletionProcPtr )(DBAsyncParmBlkPtr pb); /* WARNING: DBCompletionProcPtr uses register based parameters under classic 68k and cannot be written in a high-level language without the help of mixed mode or assembly glue. */ typedef REGISTER_UPP_TYPE(DBCompletionProcPtr) DBCompletionUPP; /* structure for asynchronous parameter block */ struct DBAsyncParamBlockRec { DBCompletionUPP completionProc; /* pointer to completion routine */ OSErr result; /* result of call */ long userRef; /* for application's use */ long ddevRef; /* for ddev's use */ long reserved; /* for internal use */ }; /* structure for resource list in QueryRecord */ struct ResListElem { ResType theType; /* resource type */ short id; /* resource id */ }; typedef struct ResListElem ResListElem; typedef ResListElem * ResListPtr; typedef ResListPtr * ResListHandle; /* structure for query list in QueryRecord */ typedef Handle QueryArray[256]; typedef Handle * QueryListPtr; typedef QueryListPtr * QueryListHandle; struct QueryRecord { short version; /* version */ short id; /* id of 'qrsc' this came from */ Handle queryProc; /* handle to query def proc */ Str63 ddevName; /* ddev name */ Str255 host; /* host name */ Str255 user; /* user name */ Str255 password; /* password */ Str255 connStr; /* connection string */ short currQuery; /* index of current query */ short numQueries; /* number of queries in list */ QueryListHandle queryList; /* handle to array of handles to text */ short numRes; /* number of resources in list */ ResListHandle resList; /* handle to array of resource list elements */ Handle dataHandle; /* for use by query def proc */ long refCon; /* for use by application */ }; typedef struct QueryRecord QueryRecord; typedef QueryRecord * QueryPtr; typedef QueryPtr * QueryHandle; /* structure of column types array in ResultsRecord */ typedef DBType ColTypesArray[256]; typedef Handle ColTypesHandle; /* structure for column info in ResultsRecord */ struct DBColInfoRecord { short len; short places; short flags; }; typedef struct DBColInfoRecord DBColInfoRecord; typedef DBColInfoRecord ColInfoArray[256]; typedef Handle ColInfoHandle; /* structure of results returned by DBGetResults */ struct ResultsRecord { short numRows; /* number of rows in result */ short numCols; /* number of columns per row */ ColTypesHandle colTypes; /* data type array */ Handle colData; /* actual results */ ColInfoHandle colInfo; /* DBColInfoRecord array */ }; typedef struct ResultsRecord ResultsRecord; enum { /* messages sent to a 'ddev'*/ kDBInit = 0, kDBEnd = 1, kDBGetConnInfo = 2, kDBGetSessionNum = 3, kDBSend = 4, kDBSendItem = 5, kDBExec = 6, kDBState = 7, kDBGetErr = 8, kDBBreak = 9, kDBGetItem = 10, kDBUngetItem = 11, kDBKill = 12, kDBOpen = 100, kDBClose = 101, kDBIdle = 102 }; typedef CALLBACK_API( OSErr , DBQueryDefProcPtr )(long *sessID, QueryHandle query); typedef CALLBACK_API( Boolean , DBStatusProcPtr )(short message, OSErr result, short dataLen, short dataPlaces, short dataFlags, DBType dataType, Ptr dataPtr); typedef CALLBACK_API( OSErr , DBResultHandlerProcPtr )(DBType dataType, short theLen, short thePlaces, short theFlags, Ptr theData, Handle theText); typedef STACK_UPP_TYPE(DBQueryDefProcPtr) DBQueryDefUPP; typedef STACK_UPP_TYPE(DBStatusProcPtr) DBStatusUPP; typedef STACK_UPP_TYPE(DBResultHandlerProcPtr) DBResultHandlerUPP; #if OPAQUE_UPP_TYPES #if CALL_NOT_IN_CARBON EXTERN_API(DBCompletionUPP) NewDBCompletionUPP (DBCompletionProcPtr userRoutine); EXTERN_API(DBQueryDefUPP) NewDBQueryDefUPP (DBQueryDefProcPtr userRoutine); EXTERN_API(DBStatusUPP) NewDBStatusUPP (DBStatusProcPtr userRoutine); EXTERN_API(DBResultHandlerUPP) NewDBResultHandlerUPP (DBResultHandlerProcPtr userRoutine); EXTERN_API(void) DisposeDBCompletionUPP (DBCompletionUPP userUPP); EXTERN_API(void) DisposeDBQueryDefUPP (DBQueryDefUPP userUPP); EXTERN_API(void) DisposeDBStatusUPP (DBStatusUPP userUPP); EXTERN_API(void) DisposeDBResultHandlerUPP (DBResultHandlerUPP userUPP); EXTERN_API(void) InvokeDBCompletionUPP (DBAsyncParmBlkPtr pb, DBCompletionUPP userUPP); EXTERN_API(OSErr) InvokeDBQueryDefUPP (long * sessID, QueryHandle query, DBQueryDefUPP userUPP); EXTERN_API(Boolean) InvokeDBStatusUPP (short message, OSErr result, short dataLen, short dataPlaces, short dataFlags, DBType dataType, Ptr dataPtr, DBStatusUPP userUPP); EXTERN_API(OSErr) InvokeDBResultHandlerUPP (DBType dataType, short theLen, short thePlaces, short theFlags, Ptr theData, Handle theText, DBResultHandlerUPP userUPP); #endif /* CALL_NOT_IN_CARBON */ #else enum { uppDBCompletionProcInfo = 0x0000B802 }; /* register no_return_value Func(4_bytes:A1) */ enum { uppDBQueryDefProcInfo = 0x000003E0 }; /* pascal 2_bytes Func(4_bytes, 4_bytes) */ enum { uppDBStatusProcInfo = 0x000FAA90 }; /* pascal 1_byte Func(2_bytes, 2_bytes, 2_bytes, 2_bytes, 2_bytes, 4_bytes, 4_bytes) */ enum { uppDBResultHandlerProcInfo = 0x0003EAE0 }; /* pascal 2_bytes Func(4_bytes, 2_bytes, 2_bytes, 2_bytes, 4_bytes, 4_bytes) */ #define NewDBCompletionUPP(userRoutine) (DBCompletionUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDBCompletionProcInfo, GetCurrentArchitecture()) #define NewDBQueryDefUPP(userRoutine) (DBQueryDefUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDBQueryDefProcInfo, GetCurrentArchitecture()) #define NewDBStatusUPP(userRoutine) (DBStatusUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDBStatusProcInfo, GetCurrentArchitecture()) #define NewDBResultHandlerUPP(userRoutine) (DBResultHandlerUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDBResultHandlerProcInfo, GetCurrentArchitecture()) #define DisposeDBCompletionUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define DisposeDBQueryDefUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define DisposeDBStatusUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define DisposeDBResultHandlerUPP(userUPP) DisposeRoutineDescriptor(userUPP) #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM #pragma parameter InvokeDBCompletionUPP(__A1, __A0) void InvokeDBCompletionUPP(DBAsyncParmBlkPtr pb, DBCompletionUPP userUPP) = 0x4E90; #else #define InvokeDBCompletionUPP(pb, userUPP) CALL_ONE_PARAMETER_UPP((userUPP), uppDBCompletionProcInfo, (pb)) #endif #define InvokeDBQueryDefUPP(sessID, query, userUPP) (OSErr)CALL_TWO_PARAMETER_UPP((userUPP), uppDBQueryDefProcInfo, (sessID), (query)) #define InvokeDBStatusUPP(message, result, dataLen, dataPlaces, dataFlags, dataType, dataPtr, userUPP) (Boolean)CALL_SEVEN_PARAMETER_UPP((userUPP), uppDBStatusProcInfo, (message), (result), (dataLen), (dataPlaces), (dataFlags), (dataType), (dataPtr)) #define InvokeDBResultHandlerUPP(dataType, theLen, thePlaces, theFlags, theData, theText, userUPP) (OSErr)CALL_SIX_PARAMETER_UPP((userUPP), uppDBResultHandlerProcInfo, (dataType), (theLen), (thePlaces), (theFlags), (theData), (theText)) #endif /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */ #define NewDBCompletionProc(userRoutine) NewDBCompletionUPP(userRoutine) #define NewDBQueryDefProc(userRoutine) NewDBQueryDefUPP(userRoutine) #define NewDBStatusProc(userRoutine) NewDBStatusUPP(userRoutine) #define NewDBResultHandlerProc(userRoutine) NewDBResultHandlerUPP(userRoutine) #define CallDBCompletionProc(userRoutine, pb) InvokeDBCompletionUPP(pb, userRoutine) #define CallDBQueryDefProc(userRoutine, sessID, query) InvokeDBQueryDefUPP(sessID, query, userRoutine) #define CallDBStatusProc(userRoutine, message, result, dataLen, dataPlaces, dataFlags, dataType, dataPtr) InvokeDBStatusUPP(message, result, dataLen, dataPlaces, dataFlags, dataType, dataPtr, userRoutine) #define CallDBResultHandlerProc(userRoutine, dataType, theLen, thePlaces, theFlags, theData, theText) InvokeDBResultHandlerUPP(dataType, theLen, thePlaces, theFlags, theData, theText, userRoutine) #if CALL_NOT_IN_CARBON EXTERN_API( OSErr ) InitDBPack (void) FIVEWORDINLINE(0x3F3C, 0x0004, 0x303C, 0x0100, 0xA82F); EXTERN_API( OSErr ) DBInit (long * sessID, ConstStr63Param ddevName, ConstStr255Param host, ConstStr255Param user, ConstStr255Param passwd, ConstStr255Param connStr, DBAsyncParmBlkPtr asyncPB) THREEWORDINLINE(0x303C, 0x0E02, 0xA82F); EXTERN_API( OSErr ) DBEnd (long sessID, DBAsyncParmBlkPtr asyncPB) THREEWORDINLINE(0x303C, 0x0403, 0xA82F); EXTERN_API( OSErr ) DBGetConnInfo (long sessID, short sessNum, long * returnedID, long * version, Str63 ddevName, Str255 host, Str255 user, Str255 network, Str255 connStr, long * start, OSErr * state, DBAsyncParmBlkPtr asyncPB) THREEWORDINLINE(0x303C, 0x1704, 0xA82F); EXTERN_API( OSErr ) DBGetSessionNum (long sessID, short * sessNum, DBAsyncParmBlkPtr asyncPB) THREEWORDINLINE(0x303C, 0x0605, 0xA82F); EXTERN_API( OSErr ) DBSend (long sessID, Ptr text, short len, DBAsyncParmBlkPtr asyncPB) THREEWORDINLINE(0x303C, 0x0706, 0xA82F); EXTERN_API( OSErr ) DBSendItem (long sessID, DBType dataType, short len, short places, short flags, void * buffer, DBAsyncParmBlkPtr asyncPB) THREEWORDINLINE(0x303C, 0x0B07, 0xA82F); EXTERN_API( OSErr ) DBExec (long sessID, DBAsyncParmBlkPtr asyncPB) THREEWORDINLINE(0x303C, 0x0408, 0xA82F); EXTERN_API( OSErr ) DBState (long sessID, DBAsyncParmBlkPtr asyncPB) THREEWORDINLINE(0x303C, 0x0409, 0xA82F); EXTERN_API( OSErr ) DBGetErr (long sessID, long * err1, long * err2, Str255 item1, Str255 item2, Str255 errorMsg, DBAsyncParmBlkPtr asyncPB) THREEWORDINLINE(0x303C, 0x0E0A, 0xA82F); EXTERN_API( OSErr ) DBBreak (long sessID, Boolean abort, DBAsyncParmBlkPtr asyncPB) THREEWORDINLINE(0x303C, 0x050B, 0xA82F); EXTERN_API( OSErr ) DBGetItem (long sessID, long timeout, DBType * dataType, short * len, short * places, short * flags, void * buffer, DBAsyncParmBlkPtr asyncPB) THREEWORDINLINE(0x303C, 0x100C, 0xA82F); EXTERN_API( OSErr ) DBUnGetItem (long sessID, DBAsyncParmBlkPtr asyncPB) THREEWORDINLINE(0x303C, 0x040D, 0xA82F); EXTERN_API( OSErr ) DBKill (DBAsyncParmBlkPtr asyncPB) THREEWORDINLINE(0x303C, 0x020E, 0xA82F); EXTERN_API( OSErr ) DBGetNewQuery (short queryID, QueryHandle * query) THREEWORDINLINE(0x303C, 0x030F, 0xA82F); EXTERN_API( OSErr ) DBDisposeQuery (QueryHandle query) THREEWORDINLINE(0x303C, 0x0210, 0xA82F); EXTERN_API( OSErr ) DBStartQuery (long * sessID, QueryHandle query, DBStatusUPP statusProc, DBAsyncParmBlkPtr asyncPB) THREEWORDINLINE(0x303C, 0x0811, 0xA82F); EXTERN_API( OSErr ) DBGetQueryResults (long sessID, ResultsRecord * results, long timeout, DBStatusUPP statusProc, DBAsyncParmBlkPtr asyncPB) THREEWORDINLINE(0x303C, 0x0A12, 0xA82F); EXTERN_API( OSErr ) DBResultsToText (ResultsRecord * results, Handle * theText) THREEWORDINLINE(0x303C, 0x0413, 0xA82F); EXTERN_API( OSErr ) DBInstallResultHandler (DBType dataType, DBResultHandlerUPP theHandler, Boolean isSysHandler) THREEWORDINLINE(0x303C, 0x0514, 0xA82F); EXTERN_API( OSErr ) DBRemoveResultHandler (DBType dataType) THREEWORDINLINE(0x303C, 0x0215, 0xA82F); EXTERN_API( OSErr ) DBGetResultHandler (DBType dataType, DBResultHandlerUPP * theHandler, Boolean getSysHandler) THREEWORDINLINE(0x303C, 0x0516, 0xA82F); EXTERN_API( OSErr ) DBIdle (void) THREEWORDINLINE(0x303C, 0x00FF, 0xA82F); #endif /* CALL_NOT_IN_CARBON */ #if PRAGMA_STRUCT_ALIGN #pragma options align=reset #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(pop) #elif PRAGMA_STRUCT_PACK #pragma pack() #endif #ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset #endif #ifdef __cplusplus } #endif #endif /* __DATABASEACCESS__ */