summaryrefslogtreecommitdiff
path: root/public/gcsdk/sqlaccess/schemaupdate.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/gcsdk/sqlaccess/schemaupdate.h')
-rw-r--r--public/gcsdk/sqlaccess/schemaupdate.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/public/gcsdk/sqlaccess/schemaupdate.h b/public/gcsdk/sqlaccess/schemaupdate.h
new file mode 100644
index 0000000..17cff47
--- /dev/null
+++ b/public/gcsdk/sqlaccess/schemaupdate.h
@@ -0,0 +1,95 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Contains the job that's responsible for updating the database schema
+//
+//=============================================================================
+#ifndef UPDATESCHEMA_H
+#define UPDATESCHEMA_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+namespace GCSDK
+{
+typedef CUtlMap<const char *,CRecordInfo *> CMapPRecordInfo;
+
+enum EConversionMode
+{
+ k_EConversionModeInspectOnly,
+ k_EConversionModeConvertSafe,
+ k_EConversionModeConvertIrreversible
+};
+
+class CSchemaUpdate : public CRefCount
+{
+public:
+ CSchemaUpdate();
+
+ void AddRecordInfoDesired( CRecordInfo *pRecordInfo );
+ void AddFTSInfo( const CFTSCatalogInfo &refFTSInfo );
+ void AddTriggerInfos( const CUtlVector< CTriggerInfo > &refTriggerInfo );
+
+ // input parameters
+ CMapPRecordInfo m_mapPRecordInfoDesired;
+ EConversionMode m_eConversionMode;
+ CUtlLinkedList< CFTSCatalogInfo > m_listFTSCatalogInfo;
+ CUtlVector< CTriggerInfo > m_vecTriggerInfo;
+
+ // output parameters
+ bool m_bConversionNeeded;
+ bool m_bSkippedAChange;
+ int m_cTablesDesiredMissing;
+ int m_cTablesActualDifferent;
+ int m_cTablesActualUnknown;
+ int m_cTablesNeedingChange;
+ int m_cColumnsDesiredMissing;
+ int m_cColumnsActualDifferent;
+ int m_cColumnsActualUnknown;
+
+ CFmtStr1024 m_sDetail;
+
+private:
+ virtual ~CSchemaUpdate();
+};
+
+// --------------------------------------------------------------------------
+
+class CJobUpdateSchema : public CGCJob
+{
+public:
+ CJobUpdateSchema( CGCBase *pGC, int iTableCount ) : CGCJob( pGC ), m_mapSQLTypeToEType( DefLessFunc(int) ), m_iTableCount( iTableCount ) { }
+ bool BYieldingRunJob( void * );
+private:
+ bool BYieldingUpdateSchema( ESchemaCatalog eSchemaCatalog );
+ SQLRETURN YieldingEnsureDatabaseSchemaCorrect( ESchemaCatalog eSchemaCatalog, CSchemaUpdate *pSchemaUpdate );
+ EGCSQLType GetEGCSQLTypeForMSSQLType( int nType );
+ bool YieldingBuildTypeMap( ESchemaCatalog eSchemaCatalog );
+ SQLRETURN YieldingGetSchemaID( ESchemaCatalog eSchemaCatalog, int *pSchemaID );
+ SQLRETURN YieldingGetRecordInfoForAllTables( ESchemaCatalog eSchemaCatalog, int nSchemaID, CMapPRecordInfo &mapPRecordInfo );
+ SQLRETURN YieldingGetColumnInfoForTable( ESchemaCatalog eSchemaCatalog, CMapPRecordInfo &mapPRecordInfo, int nTableID, const char *pchTableName );
+ SQLRETURN YieldingGetTableFKConstraints( ESchemaCatalog eSchemaCatalog, CRecordInfo *pRecordInfo );
+ SQLRETURN YieldingGetColumnIndexes( ESchemaCatalog eSchemaCatalog, CRecordInfo *pRecordInfo );
+ SQLRETURN YieldingGetTriggers( ESchemaCatalog eSchemaCatalog, int nSchemaID, CUtlVector< CTriggerInfo > &vecTriggerInfo );
+ SQLRETURN YieldingCreateTable( ESchemaCatalog eSchemaCatalog, CRecordInfo *pRecordInfo );
+ SQLRETURN YieldingAddIndex( ESchemaCatalog eSchemaCatalog, CRecordInfo *pRecordInfo, const FieldSet_t &refFields );
+ SQLRETURN YieldingAlterTableAddColumn( ESchemaCatalog eSchemaCatalog, CRecordInfo *pRecordInfo, const CColumnInfo *pColumnInfo );
+ SQLRETURN YieldingAddConstraint( ESchemaCatalog eSchemaCatalog, CRecordInfo *pRecordInfo, const CColumnInfo *pColumnInfo, int nColFlagConstraint );
+ SQLRETURN YieldingChangeColumnTypeOrLength( ESchemaCatalog eSchemaCatalog, CRecordInfo *pRecordInfo, const CColumnInfo *pColumnInfoDesired );
+ SQLRETURN YieldingChangeColumnProperties( ESchemaCatalog eSchemaCatalog, CRecordInfo *pRecordInfo, const CColumnInfo *pColumnInfoActual, const CColumnInfo *pColumnInfoDesired );
+ SQLRETURN YieldingCreateTrigger( ESchemaCatalog eSchemaCatalog, CTriggerInfo &refTriggerInfo );
+ SQLRETURN YieldingDropTrigger( ESchemaCatalog eSchemaCatalog, CTriggerInfo &refTriggerInfo );
+
+ CUtlMap<int,EGCSQLType> m_mapSQLTypeToEType;
+ int m_iTableCount;
+
+ EConversionMode m_eConversionMode;
+
+ CUtlString m_sRecommendedSQL;
+ CUtlString m_sDataDestroyingCleanupSQL;
+ void AddDataDestroyingConversion( const char *pszSQL, const char *pszComment );
+ SQLRETURN YieldingProcessUnsafeConversion( ESchemaCatalog eSchemaCatalog, const char *pszSQL, const char *pszComment = NULL );
+};
+
+
+} // namespace GCSDK
+#endif // UPDATESCHEMA_H