windows-nt/Source/XPSP1/NT/net/jet500/xjet/inc/cat.h
2020-09-26 16:20:57 +08:00

193 lines
5 KiB
C

typedef struct _cdesc /* Column Description */
{
char *szColName; /* Column Name */
JET_COLTYP coltyp; /* Column Type */
JET_GRBIT grbit; /* Flag bits */
ULONG ulMaxLen; /* Max Length of Column */
} CDESC;
typedef struct _idesc /* Index Description */
{
char *szIdxName; /* Index Name */
char *szIdxKeys; /* Key String */
JET_GRBIT grbit; /* Flag bits */
} IDESC;
typedef struct {
const char *szName;
CODECONST(CDESC) *pcdesc;
CODECONST(IDESC) *pidesc;
BYTE ccolumn;
BYTE cindex;
CPG cpg;
JET_COLUMNID *rgcolumnid;
PGNO pgnoTableFDP;
} SYSTABLEDEF;
// UNDONE: change #defines to enumerated types?
#define itableSo 0 /* MSysObjects */
#define itableSc 1 /* MSysColumns */
#define itableSi 2 /* MSysIndexes */
#define itableSa 3 /* MSysACEs */
#define itableSq 4 /* MSysQueries */
#define itableSr 5 /* MSysRelationShips */
#define iMSO_Id 0
#define iMSO_ParentId 1
#define iMSO_Name 2
#define iMSO_Type 3
#define iMSO_DateCreate 4
#define iMSO_DateUpdate 5
#define iMSO_Owner 6
#define iMSO_Flags 7
#define iMSO_Pages 8
#define iMSO_Density 9
#define iMSO_Stats 10
#define iMSC_ObjectId 0
#define iMSC_Name 1
#define iMSC_ColumnId 2
#define iMSC_Coltyp 3
#define iMSC_Length 4
#define iMSC_CodePage 5
#define iMSC_Flags 6
#define iMSC_RecordOffset 7
#define iMSC_Default 8
#define iMSC_POrder 9
#define iMSI_ObjectId 0
#define iMSI_Name 1
#define iMSI_IndexId 2
#define iMSI_Density 3
#define iMSI_LanguageId 4
#define iMSI_Flags 5
#define iMSI_KeyFldIDs 6
#define iMSI_Stats 7
#define iMSI_VarSegMac 8
/* max number of columns
/**/
#define ilineSxMax 11
#if 0
#define CheckTableObject( szTable ) \
{ \
ERR err; \
OBJID objid; \
JET_OBJTYP objtyp; \
\
err = ErrFindObjidFromIdName( ppib, \
dbid, \
objidTblContainer, \
szTable, \
&objid, \
&objtyp ); \
if ( err >= JET_errSuccess ) \
{ \
if ( objtyp == JET_objtypQuery ) \
return ErrERRCheck( JET_errQueryNotSupported ); \
if ( objtyp == JET_objtypLink ) \
return ErrERRCheck( JET_errLinkNotSupported ); \
if ( objtyp == JET_objtypSQLLink ) \
return ErrERRCheck( JET_errSQLLinkNotSupported ); \
} \
else \
return err; \
}
#endif
/* prototypes
/**/
ERR ErrCATCreate( PIB *ppib, DBID dbid );
ERR ErrCATInsert( PIB *ppib, DBID dbid, INT itable, LINE rgline[], OBJID objid );
ERR ErrCATBatchInsert(
PIB *ppib,
DBID dbid,
JET_COLUMNCREATE *pcolcreate,
ULONG cColumns,
OBJID objidTable,
BOOL fCompacting );
ERR ErrCATDelete( PIB *ppib, DBID dbid, INT itable, CHAR *szName, OBJID objid );
ERR ErrCATReplace(
PIB *ppib,
DBID dbid,
INT itable,
OBJID objidTable,
CHAR *szName,
INT iReplaceField,
BYTE *rgbReplaceValue,
INT cbReplaceValue);
ERR ErrCATRename(
PIB *ppib,
DBID dbid,
CHAR *szNew,
CHAR *szName,
OBJID objid,
INT itable );
ERR ErrCATTimestamp( PIB *ppib, DBID dbid, OBJID objid );
ERR ErrCATFindObjidFromIdName(
PIB *ppib,
DBID dbid,
OBJID objidParentId,
const CHAR *lszName,
OBJID *pobjid,
JET_OBJTYP *pobjtyp );
ERR ErrCATFindNameFromObjid( PIB *ppib, DBID dbid, OBJID objid, VOID *pv, unsigned long cbMax, unsigned long *pcbActual );
ERR ErrCATGetIndexLangid(
PIB *ppib,
DBID dbid,
PGNO pgnoTable,
CHAR *szIndexName,
USHORT *pusLanguageid );
ERR ErrCATConstructCATFDB( FDB **ppfdbNew, CHAR *szFileName);
ERR ErrCATTableColumnInfo( PIB *ppib, DBID dbid, OBJID objidTable, TCIB *ptcib, BOOL fSetValue);
ERR ErrCATConstructFDB( PIB *ppib, DBID dbid, PGNO pgnoTableFDP, FDB **ppfdbNew);
ULONG UlCATColumnSize( JET_COLTYP coltyp, INT cbMax, BOOL *pfMaxTruncated);
ERR ErrCATGetTableAllocInfo( PIB *ppib, DBID dbid, PGNO pgnoTable,
ULONG *pulPages, ULONG *pulDensity );
ERR ErrCATGetIndexAllocInfo( PIB *ppib, DBID dbid, PGNO pgnoTable,
CHAR *szIndexName, ULONG *pulDensity );
JET_COLUMNID ColumnidCATGetColumnid( INT iTable, INT iField );
PGNO PgnoCATTableFDP( CHAR *szTable );
ERR ErrCATGetCATIndexInfo(
PIB *ppib,
DBID dbid,
FCB **ppfcb,
FDB *pfdb,
PGNO pgnoTableFDP,
CHAR *szTableName,
BOOL fCreatingSys );
ERR ErrCATGetIndexInfo(
PIB *ppib,
DBID dbid,
FCB **ppfcb,
FDB *pfdb,
PGNO pgnoTableFDP );
#define szSysRoot "MSys"
#define cbSysRoot strlen(szSysRoot)
INLINE LOCAL BOOL FCATSystemTable( const CHAR *szTableName )
{
const CHAR *szRestOfName;
LONG lResult;
/* determine if we are openning a system table
/**/
UtilStringCompare( szTableName, cbSysRoot, szSysRoot, cbSysRoot, 0, &lResult );
if ( lResult == 0 )
{
szRestOfName = szTableName + cbSysRoot;
return UtilCmpName( szRestOfName, szSoTable+cbSysRoot ) == 0 ||
UtilCmpName( szRestOfName, szScTable+cbSysRoot ) == 0 ||
UtilCmpName( szRestOfName, szSiTable+cbSysRoot ) == 0;
}
return fFalse;
}