]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/dbtable.cpp
don't write the strings to the stream one char at a time, it's *horribly* slow
[wxWidgets.git] / src / common / dbtable.cpp
index 8a67be23116a9bf1caca1df699a8da631085cd5c..49e2c2348db14234dc13c3314ce11f534fe1c93b 100644 (file)
 #endif
 
 #ifdef DBDEBUG_CONSOLE
 #endif
 
 #ifdef DBDEBUG_CONSOLE
-    #include "iostream.h"
+#if wxUSE_IOSTREAMH
+    #include <iostream.h>
+#else
+    #include <iostream>
+#endif
     #include "wx/ioswrap.h"
 #endif
 
     #include "wx/ioswrap.h"
 #endif
 
@@ -524,15 +528,16 @@ bool wxDbTable::bindUpdateParams(void)
 /********** wxDbTable::bindCols() **********/
 bool wxDbTable::bindCols(HSTMT cursor)
 {
 /********** wxDbTable::bindCols() **********/
 bool wxDbTable::bindCols(HSTMT cursor)
 {
+    static SDWORD cb;
+
     // Bind each column of the table to a memory address for fetching data
     UWORD i;
     for (i = 0; i < noCols; i++)
     {
     // Bind each column of the table to a memory address for fetching data
     UWORD i;
     for (i = 0; i < noCols; i++)
     {
+        cb = colDefs[i].CbValue;
         if (SQLBindCol(cursor, (UWORD)(i+1), colDefs[i].SqlCtype, (UCHAR*) colDefs[i].PtrDataObj,
         if (SQLBindCol(cursor, (UWORD)(i+1), colDefs[i].SqlCtype, (UCHAR*) colDefs[i].PtrDataObj,
-                       colDefs[i].SzDataObj, &colDefs[i].CbValue ) != SQL_SUCCESS)
-        {
+                       colDefs[i].SzDataObj, &cb ) != SQL_SUCCESS)
           return (pDb->DispAllErrors(henv, hdbc, cursor));
           return (pDb->DispAllErrors(henv, hdbc, cursor));
-        }
     }
 
     // Completed successfully
     }
 
     // Completed successfully
@@ -1121,7 +1126,7 @@ void wxDbTable::BuildUpdateStmt(wxString &pSqlStmt, int typeOfUpd, const wxStrin
     bool firstColumn = TRUE;
 
     pSqlStmt.Printf(wxT("UPDATE %s SET "),
     bool firstColumn = TRUE;
 
     pSqlStmt.Printf(wxT("UPDATE %s SET "),
-                    pDb->SQLTableName(tableName.Upper().c_str()).c_str());
+                    pDb->SQLTableName(tableName.c_str()).c_str());
 
     // Append a list of columns to be updated
     int i;
 
     // Append a list of columns to be updated
     int i;
@@ -1380,7 +1385,8 @@ bool wxDbTable::CreateTable(bool attemptDrop)
                 break;
         }
         // For varchars, append the size of the string
                 break;
         }
         // For varchars, append the size of the string
-        if (colDefs[i].DbDataType == DB_DATA_TYPE_VARCHAR)// ||
+        if (colDefs[i].DbDataType == DB_DATA_TYPE_VARCHAR &&
+            (pDb->Dbms() != dbmsMY_SQL || pDb->GetTypeInfVarchar().TypeName != "text"))// ||
 //            colDefs[i].DbDataType == DB_DATA_TYPE_BLOB)
         {
             wxString s;
 //            colDefs[i].DbDataType == DB_DATA_TYPE_BLOB)
         {
             wxString s;
@@ -1452,7 +1458,14 @@ bool wxDbTable::CreateTable(bool attemptDrop)
                 if (j++) // Multi part key, comma separate names
                     sqlStmt += wxT(",");
                 sqlStmt += pDb->SQLColumnName(colDefs[i].ColName);
                 if (j++) // Multi part key, comma separate names
                     sqlStmt += wxT(",");
                 sqlStmt += pDb->SQLColumnName(colDefs[i].ColName);
-//                sqlStmt += colDefs[i].ColName;
+
+                if (pDb->Dbms() == dbmsMY_SQL &&
+                    colDefs[i].DbDataType ==  DB_DATA_TYPE_VARCHAR)
+                {
+                    wxString s;
+                    s.Printf(wxT("(%d)"), colDefs[i].SzDataObj);
+                    sqlStmt += s;
+                }
             }
         }
         sqlStmt += wxT(")");
             }
         }
         sqlStmt += wxT(")");
@@ -1696,7 +1709,7 @@ bool wxDbTable::DropIndex(const wxString &idxName)
         pDb->Dbms() == dbmsDBASE /*|| Paradox needs this syntax too when we add support*/)
         sqlStmt.Printf(wxT("DROP INDEX %s ON %s"),
                        pDb->SQLTableName(idxName.c_str()).c_str(),
         pDb->Dbms() == dbmsDBASE /*|| Paradox needs this syntax too when we add support*/)
         sqlStmt.Printf(wxT("DROP INDEX %s ON %s"),
                        pDb->SQLTableName(idxName.c_str()).c_str(),
-                       pDb->SQLTableName(tableName.c_str().c_str()));
+                       pDb->SQLTableName(tableName.c_str()).c_str());
     else if ((pDb->Dbms() == dbmsMS_SQL_SERVER) ||
              (pDb->Dbms() == dbmsSYBASE_ASE))
         sqlStmt.Printf(wxT("DROP INDEX %s.%s"),
     else if ((pDb->Dbms() == dbmsMS_SQL_SERVER) ||
              (pDb->Dbms() == dbmsSYBASE_ASE))
         sqlStmt.Printf(wxT("DROP INDEX %s.%s"),
@@ -2106,6 +2119,9 @@ void wxDbTable::SetColDefs(UWORD index, const wxString &fieldName, int dataType,
                            SWORD cType, int size, bool keyField, bool upd,
                            bool insAllow, bool derivedCol)
 {
                            SWORD cType, int size, bool keyField, bool upd,
                            bool insAllow, bool derivedCol)
 {
+    wxASSERT_MSG( index < noCols,
+                  _T("Specified column index exceeds the maximum number of columns for this table.") );
+
     if (!colDefs)  // May happen if the database connection fails
         return;
 
     if (!colDefs)  // May happen if the database connection fails
         return;