X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4a8fc2c8b3e7316068fd64fe8deb834b8c18342f..82a5f02c861e8d57ba8255a9553b941118ad4520:/include/wx/dbtable.h diff --git a/include/wx/dbtable.h b/include/wx/dbtable.h index 5a5e5c9a85..21f633e92d 100644 --- a/include/wx/dbtable.h +++ b/include/wx/dbtable.h @@ -1,8 +1,10 @@ /////////////////////////////////////////////////////////////////////////////// // Name: dbtable.h -// Purpose: Declaration of the wxTable class. +// Purpose: Declaration of the wxDbTable class. // Author: Doug Card // Modified by: George Tasker +// Bart Jourquin +// Mark Johnson // Created: 9.96 // RCS-ID: $Id$ // Copyright: (c) 1996 Remstar International, Inc. @@ -33,7 +35,7 @@ #if wxMAJOR_VERSION == 2 #ifdef __GNUG__ - #pragma interface "dbtable.h" + #pragma interface "dbtable.h" #endif #endif @@ -43,20 +45,24 @@ #include "db.h" #endif -const int ROWID_LEN = 24; // 18 is the max, 24 is in case it gets larger -const int DEFAULT_CURSOR = 0; -const bool QUERY_ONLY = TRUE; -const bool DISABLE_VIEW = TRUE; +const int wxDB_ROWID_LEN = 24; // 18 is the max, 24 is in case it gets larger +const int wxDB_DEFAULT_CURSOR = 0; +const bool wxDB_QUERY_ONLY = TRUE; +const bool wxDB_DISABLE_VIEW = TRUE; + +// Used to indicate end of a variable length list of +// column numbers passed to member functions +const int wxDB_NO_MORE_COLUMN_NUMBERS = -1; // The following class is used to define a column of a table. -// The wxTable constructor will dynamically allocate as many of +// The wxDbTable constructor will dynamically allocate as many of // these as there are columns in the table. The class derived -// from wxTable must initialize these column definitions in it's +// from wxDbTable must initialize these column definitions in it's // constructor. These column definitions provide inf. to the -// wxTable class which allows it to create a table in the data +// wxDbTable class which allows it to create a table in the data // source, exchange data between the data source and the C++ // object, and so on. -class WXDLLEXPORT wxColDef +class WXDLLEXPORT wxDbColDef { public: char ColName[DB_MAX_COLUMN_NAME_LEN+1]; // Column Name @@ -70,153 +76,258 @@ public: bool DerivedCol; // Specifies whether this column is a derived value SDWORD CbValue; // Internal use only!!! bool Null; // NOT FULLY IMPLEMENTED - Allows NULL values in Inserts and Updates -}; // wxColDef +}; // wxDbColDef -class WXDLLEXPORT wxColDataPtr +class WXDLLEXPORT wxDbColDataPtr { public: void *PtrDataObj; int SzDataObj; int SqlCtype; -}; // wxColDataPtr +}; // wxDbColDataPtr // This structure is used when creating secondary indexes. -class WXDLLEXPORT wxIdxDef +class WXDLLEXPORT wxDbIdxDef { public: char ColName[DB_MAX_COLUMN_NAME_LEN+1]; bool Ascending; -}; // wxIdxDef +}; // wxDbIdxDef -class WXDLLEXPORT wxTable +class WXDLLEXPORT wxDbTable { private: - ULONG tableID; // Used for debugging. This can help to match up mismatched constructors/destructors + ULONG tableID; // Used for debugging. This can help to match up mismatched constructors/destructors // Private member variables - UDWORD cursorType; + UDWORD cursorType; + bool insertable; // Private member functions - bool bindInsertParams(void); - bool bindUpdateParams(void); - bool bindCols(HSTMT cursor); - bool getRec(UWORD fetchType); - bool execDelete(const char *pSqlStmt); - bool execUpdate(const char *pSqlStmt); - bool query(int queryType, bool forUpdate, bool distinct, char *pSqlStmt = 0); - -public: - // Pointer to the database object this table belongs to - wxDB *pDb; + bool bindInsertParams(void); + bool bindUpdateParams(void); + bool bindCols(HSTMT cursor); + bool getRec(UWORD fetchType); + bool execDelete(const char *pSqlStmt); + bool execUpdate(const char *pSqlStmt); + bool query(int queryType, bool forUpdate, bool distinct, const char *pSqlStmt = NULL); + +#if !wxODBC_BACKWARD_COMPATABILITY +// these were public + // Where, Order By and From clauses + wxString where; // Standard SQL where clause, minus the word WHERE + wxString orderBy; // Standard SQL order by clause, minus the ORDER BY + wxString from; // Allows for joins in a wxDbTable::Query(). Format: ",tbl,tbl..." // ODBC Handles - HENV henv; // ODBC Environment handle - HDBC hdbc; // ODBC DB Connection handle - HSTMT hstmt; // ODBC Statement handle - HSTMT *hstmtDefault; // Default cursor - HSTMT hstmtInsert; // ODBC Statement handle used specifically for inserts - HSTMT hstmtDelete; // ODBC Statement handle used specifically for deletes - HSTMT hstmtUpdate; // ODBC Statement handle used specifically for updates - HSTMT hstmtInternal; // ODBC Statement handle used internally only - HSTMT *hstmtCount; // ODBC Statement handle used by Count() function (No binding of columns) + HENV henv; // ODBC Environment handle + HDBC hdbc; // ODBC DB Connection handle + HSTMT hstmt; // ODBC Statement handle + HSTMT *hstmtDefault; // Default cursor + HSTMT hstmtInsert; // ODBC Statement handle used specifically for inserts + HSTMT hstmtDelete; // ODBC Statement handle used specifically for deletes + HSTMT hstmtUpdate; // ODBC Statement handle used specifically for updates + HSTMT hstmtInternal; // ODBC Statement handle used internally only + HSTMT *hstmtCount; // ODBC Statement handle used by Count() function (No binding of columns) - // Table Inf. - char tableName[DB_MAX_TABLE_NAME_LEN+1]; // Table name - char queryTableName[DB_MAX_TABLE_NAME_LEN+1]; // Query Table Name - int noCols; // # of columns in the table - bool queryOnly; // Query Only, no inserts, updates or deletes + // Flags + bool selectForUpdate; - char tablePath[DB_PATH_MAX]; // needed for dBase tables + // Pointer to the database object this table belongs to + wxDb *pDb; - // Column Definitions - wxColDef *colDefs; // Array of wxColDef structures + // Table Inf. + char tablePath[wxDB_PATH_MAX]; // needed for dBase tables + char tableName[DB_MAX_TABLE_NAME_LEN+1]; // Table name + char queryTableName[DB_MAX_TABLE_NAME_LEN+1]; // Query Table Name + int noCols; // # of columns in the table + bool queryOnly; // Query Only, no inserts, updates or deletes + // Column Definitions + wxDbColDef *colDefs; // Array of wxDbColDef structures +#endif +public: +#if wxODBC_BACKWARD_COMPATABILITY // Where, Order By and From clauses - char *where; // Standard SQL where clause, minus the word WHERE - char *orderBy; // Standard SQL order by clause, minus the ORDER BY - char *from; // Allows for joins in a wxTable::Query(). Format: ",tbl,tbl..." + char *where; // Standard SQL where clause, minus the word WHERE + char *orderBy; // Standard SQL order by clause, minus the ORDER BY + char *from; // Allows for joins in a wxDbTable::Query(). Format: ",tbl,tbl..." + + // ODBC Handles + HENV henv; // ODBC Environment handle + HDBC hdbc; // ODBC DB Connection handle + HSTMT hstmt; // ODBC Statement handle + HSTMT *hstmtDefault; // Default cursor + HSTMT hstmtInsert; // ODBC Statement handle used specifically for inserts + HSTMT hstmtDelete; // ODBC Statement handle used specifically for deletes + HSTMT hstmtUpdate; // ODBC Statement handle used specifically for updates + HSTMT hstmtInternal; // ODBC Statement handle used internally only + HSTMT *hstmtCount; // ODBC Statement handle used by Count() function (No binding of columns) // Flags - bool selectForUpdate; + bool selectForUpdate; + + // Pointer to the database object this table belongs to + wxDb *pDb; + // Table Inf. + char tablePath[wxDB_PATH_MAX]; // needed for dBase tables + char tableName[DB_MAX_TABLE_NAME_LEN+1]; // Table name + char queryTableName[DB_MAX_TABLE_NAME_LEN+1]; // Query Table Name + int noCols; // # of columns in the table + bool queryOnly; // Query Only, no inserts, updates or deletes + + // Column Definitions + wxDbColDef *colDefs; // Array of wxDbColDef structures +#endif // Public member functions - wxTable(wxDB *pwxDB, const char *tblName, const int nCols, - const char *qryTblName = 0, bool qryOnly = !QUERY_ONLY, const char *tblPath=NULL); - virtual ~wxTable(); - bool Open(void); - bool CreateTable(bool attemptDrop=TRUE); - bool DropTable(void); - bool CreateIndex(const char * idxName, bool unique, int noIdxCols, wxIdxDef *pIdxDefs, bool attemptDrop=TRUE); - bool DropIndex(const char * idxName); - bool CloseCursor(HSTMT cursor); - int Insert(void); - bool Update(void); - bool Update(const char *pSqlStmt); - bool UpdateWhere(const char *pWhereClause); - bool Delete(void); - bool DeleteWhere(const char *pWhereClause); - bool DeleteMatching(void); - virtual bool Query(bool forUpdate = FALSE, bool distinct = FALSE); - bool QueryBySqlStmt(char *pSqlStmt); - bool QueryMatching(bool forUpdate = FALSE, bool distinct = FALSE); - bool QueryOnKeyFields(bool forUpdate = FALSE, bool distinct = FALSE); - bool GetNext(void) { return(getRec(SQL_FETCH_NEXT)); } - bool operator++(int) { return(getRec(SQL_FETCH_NEXT)); } - - /***** These four functions only work with wxDB instances that are defined ***** + wxDbTable(wxDb *pwxDb, const char *tblName, const int nCols, + const char *qryTblName = NULL, bool qryOnly = !wxDB_QUERY_ONLY, const char *tblPath=""); + virtual ~wxDbTable(); + + bool Open(bool checkPrivileges=FALSE); + bool CreateTable(bool attemptDrop=TRUE); + bool DropTable(void); + bool CreateIndex(const char * idxName, bool unique, int noIdxCols, wxDbIdxDef *pIdxDefs, bool attemptDrop=TRUE); + bool DropIndex(const char * idxName); + + // Accessors + + // The member variables returned by these accessors are all + // set when the wxDbTable instance is createand cannot be + // changed, hence there is no corresponding SetXxxx function + wxDb *GetDb() { return pDb; } + const char *GetTableName() { return tableName; } + const char *GetQueryTableName() { return queryTableName; } + const char *GetTablePath() { return tablePath; } + + int GetNumberOfColumns() { return noCols; } // number of "defined" columns for this wxDbTable instance + + + const char *GetFromClause() { return from; } + const char *GetOrderByClause() { return orderBy; } + const char *GetWhereClause() { return where; } + + bool IsQueryOnly() { return queryOnly; } +#if wxODBC_BACKWARD_COMPATABILITY + void SetFromClause(const char *From) { from = (char *)From; } + void SetOrderByClause(const char *OrderBy) { orderBy = (char *)OrderBy; } + void SetWhereClause(const char *Where) { where = (char *)Where; } +#else + void SetFromClause(const wxString& From) { from = From; } + void SetOrderByClause(const wxString& OrderBy) { orderBy = OrderBy; } + bool SetOrderByColNums(int first, ...); + void SetWhereClause(const wxString& Where) { where = Where; } + void From(const wxString& From) { from = From; } + void OrderBy(const wxString& OrderBy) { orderBy = OrderBy; } + void Where(const wxString& Where) { where = Where; } + const char * Where() { return (const char *)where.c_str(); } + const char * OrderBy() { return (const char *)orderBy.c_str(); } + const char * From() { return (const char *)from.c_str(); } +#endif + int Insert(void); + bool Update(void); + bool Update(const char *pSqlStmt); + bool UpdateWhere(const char *pWhereClause); + bool Delete(void); + bool DeleteWhere(const char *pWhereClause); + bool DeleteMatching(void); + virtual bool Query(bool forUpdate = FALSE, bool distinct = FALSE); + bool QueryBySqlStmt(const char *pSqlStmt); + bool QueryMatching(bool forUpdate = FALSE, bool distinct = FALSE); + bool QueryOnKeyFields(bool forUpdate = FALSE, bool distinct = FALSE); + bool Refresh(void); + bool GetNext(void) { return(getRec(SQL_FETCH_NEXT)); } + bool operator++(int) { return(getRec(SQL_FETCH_NEXT)); } + + /***** These four functions only work with wxDb instances that are defined ***** ***** as not being FwdOnlyCursors *****/ - bool GetPrev(void); - bool operator--(int); - bool GetFirst(void); - bool GetLast(void); - - bool IsCursorClosedOnCommit(void); - bool IsColNull(int colNo); - UWORD GetRowNum(void); - void GetSelectStmt(char *pSqlStmt, int typeOfSelect, bool distinct); - void GetDeleteStmt(char *pSqlStmt, int typeOfDel, const char *pWhereClause = 0); - void GetUpdateStmt(char *pSqlStmt, int typeOfUpd, const char *pWhereClause = 0); - void GetWhereClause(char *pWhereClause, int typeOfWhere, const char *qualTableName = 0, bool useLikeComparison=FALSE); - bool CanSelectForUpdate(void); - bool CanUpdByROWID(void); - void ClearMemberVars(void); - bool SetQueryTimeout(UDWORD nSeconds); - void SetColDefs (int index, const char *fieldName, int dataType, void *pData, int cType, - int size, bool keyField = FALSE, bool upd = TRUE, - bool insAllow = TRUE, bool derivedCol = FALSE); - wxColDataPtr* SetColDefs (wxColInf *colInfs, ULONG numCols); - - HSTMT *NewCursor(bool setCursor = FALSE, bool bindColumns = TRUE); - bool DeleteCursor(HSTMT *hstmtDel); - void SetCursor(HSTMT *hstmtActivate = (void **) DEFAULT_CURSOR); - HSTMT GetCursor(void) { return(hstmt); } - ULONG Count(const char *args="*"); - int DB_STATUS(void) { return(pDb->DB_STATUS); } - bool Refresh(void); - bool SetNull(int colNo); - bool SetNull(const char *colName); + bool GetPrev(void); + bool operator--(int); + bool GetFirst(void); + bool GetLast(void); + + bool IsCursorClosedOnCommit(void); + UWORD GetRowNum(void); + + void BuildSelectStmt(char *pSqlStmt, int typeOfSelect, bool distinct); + void BuildDeleteStmt(char *pSqlStmt, int typeOfDel, const char *pWhereClause = NULL); + void BuildUpdateStmt(char *pSqlStmt, int typeOfUpd, const char *pWhereClause = NULL); + void BuildWhereClause(char *pWhereClause, int typeOfWhere, const char *qualTableName = NULL, bool useLikeComparison=FALSE); +#if wxODBC_BACKWARD_COMPATABILITY +// The following member functions are deprecated. You should use the BuildXxxxxStmt functions (above) + void GetSelectStmt(char *pSqlStmt, int typeOfSelect, bool distinct) + { BuildSelectStmt(pSqlStmt,typeOfSelect,distinct); } + void GetDeleteStmt(char *pSqlStmt, int typeOfDel, const char *pWhereClause = NULL) + { BuildDeleteStmt(pSqlStmt,typeOfDel,pWhereClause); } + void GetUpdateStmt(char *pSqlStmt, int typeOfUpd, const char *pWhereClause = NULL) + { BuildUpdateStmt(pSqlStmt,typeOfUpd,pWhereClause); } + void GetWhereClause(char *pWhereClause, int typeOfWhere, + const char *qualTableName = NULL, bool useLikeComparison=FALSE) + { BuildWhereClause(pWhereClause,typeOfWhere,qualTableName,useLikeComparison); } +#endif + bool CanSelectForUpdate(void); + bool CanUpdByROWID(void); + void ClearMemberVar(int colNo, bool setToNull=FALSE); + void ClearMemberVars(bool setToNull=FALSE); + bool SetQueryTimeout(UDWORD nSeconds); + + wxDbColDef *GetColDefs() { return colDefs; } + void SetColDefs(int index, const char *fieldName, int dataType, void *pData, int cType, + int size, bool keyField = FALSE, bool upd = TRUE, + bool insAllow = TRUE, bool derivedCol = FALSE); + wxDbColDataPtr *SetColDefs(wxDbColInf *colInfs, ULONG numCols); + + bool CloseCursor(HSTMT cursor); + bool DeleteCursor(HSTMT *hstmtDel); + void SetCursor(HSTMT *hstmtActivate = (void **) wxDB_DEFAULT_CURSOR); + HSTMT GetCursor(void) { return(hstmt); } + HSTMT *GetNewCursor(bool setCursor = FALSE, bool bindColumns = TRUE); +#if wxODBC_BACKWARD_COMPATABILITY +// The following member function is deprecated. You should use the GetNewCursor + HSTMT *NewCursor(bool setCursor = FALSE, bool bindColumns = TRUE) { return GetNewCursor(setCursor,bindColumns); } +#endif + ULONG Count(const char *args="*"); + int DB_STATUS(void) { return(pDb->DB_STATUS); } + + bool IsColNull(int colNo); + bool SetColNull(int colNo, bool set=TRUE); + bool SetColNull(const char *colName, bool set=TRUE); +#if wxODBC_BACKWARD_COMPATABILITY +// The following member functions are deprecated. You should use the SetColNull() + bool SetNull(int colNo, bool set=TRUE) { return (SetNull(colNo,set)); } + bool SetNull(const char *colName, bool set=TRUE) { return (SetNull(colName,set)); } +#endif #ifdef __WXDEBUG__ - ULONG GetTableID() { return tableID; }; + ULONG GetTableID() { return tableID; } #endif -}; // wxTable +}; // wxDbTable // Change this to 0 to remove use of all deprecated functions -#if 1 +#if wxODBC_BACKWARD_COMPATABILITY //################################################################################# //############### DEPRECATED functions for backward compatability ################# //################################################################################# // Backward compability. These will eventually go away -typedef wxColDef CcolDef; -typedef wxColDataPtr CcolDataPtr; -typedef wxIdxDef CidxDef; - +typedef wxDbTable wxTable; +typedef wxDbIdxDef wxIdxDef; +typedef wxDbIdxDef CidxDef; +typedef wxDbColDef wxColDef; +typedef wxDbColDef CcolDef; +typedef wxDbColDataPtr wxColDataPtr; +typedef wxDbColDataPtr CcolDataPtr; + +const int ROWID = wxDB_ROWID_LEN; +const int DEFAULT_CURSOR = wxDB_DEFAULT_CURSOR; +const bool QUERY_ONLY = wxDB_QUERY_ONLY; +const bool DISABLE_VIEW = wxDB_DISABLE_VIEW; #endif #endif